[SCM] A client for connecting to 3D metaverses such as Linden Labs Secondlife(tm) and OpenSim grids branch, upstream, updated. upstream/1.21.6-13-g1836a2b

Robin Cornelius robin.cornelius at gmail.com
Tue Apr 14 11:12:10 UTC 2009


The following commit has been merged in the upstream branch:
commit d5f21706b428a6a8b07dc94f711bc23e4b96a8eb
Author: Robin Cornelius <robin.cornelius at gmail.com>
Date:   Sat Dec 6 17:45:59 2008 +0000

    Imported Upstream version 1.22.2

diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..e609650
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,36 @@
+topic/debian/71_use_debian_alternatives_for_www_browser.diff -p1
+topic/debian/Allow_CXXFLAGS_to_specifiy_the_debug_flag.diff -p1
+topic/debian/VWR-8751-Build-with-a-shared-llmozlib2.diff -p1
+topic/debian/remove_as_needed.diff -p1
+topic/debian/use_debian-included_fonts.diff -p1
+topic/debian/use_debian_channel.diff -p1
+topic/debian/viewericon.diff -p1
+topic/features/jira-backported/VWR-5082_set_bulk_inv_permissions.diff -p1
+topic/features/jira-backported/avatar_list.diff -p1
+topic/features/jira-sent/24_always_test_vectorize.diff -p1
+topic/features/jira-sent/openal_1.21.0.diff -p1
+topic/fixes/jira-backported/VWR-3766_llGetInventoryNumber_tooltip_missing_INVENTORY_ANIMATION.diff -p1
+topic/fixes/jira-backported/VWR5717_text_not_replaced_by_input_with_japanses_im.diff -p1
+topic/fixes/jira-backported/glh_linear.diff -p1
+topic/fixes/jira-sent/50_get_cpu_clock_count_for_more_than_just_i386.diff -p1
+topic/fixes/jira-sent/59_need_llpreprocessor_to_access_endian_macros.diff -p1
+topic/fixes/jira-sent/VWR-1815_top_corner_fix.diff -p1
+topic/fixes/jira-sent/VWR-8194_clamp_outline_for_broken_nvidia.diff -p1
+topic/fixes/jira-sent/VWR-9557-EnableBuildWithNvidiaOrMesaHeaders.diff -p1
+topic/fixes/jira-sent/correctly_find_dbus_headers_on_standalone.diff -p1
+topic/fixes/jira-sent/dont_depend_on_artwork_to_build.diff -p1
+topic/fixes/jira-sent/gcc_warning_on_llwindowsdl_var_not_set.diff -p1
+topic/fixes/jira-sent/lltemplatemessagereader_memcpy.diff -p1
+topic/fixes/jira-sent/use_c_locale_and_dont_spam_me_because_i_am_not_american.diff -p1
+topic/fixes/new/allow_compilation_when_GST_DISABLE_GST_DEBUG_is_defined.diff -p1
+topic/fixes/new/delete_LLImageTGA_mColorMap_as_array.diff -p1
+topic/fixes/new/delete_LLMediaImplGStreamer_mediaData_as_array.diff -p1
+topic/fixes/thirdparty/0000_keep_statbars_from_overshooting.patch.diff -p1
+topic/fixes/thirdparty/0001_possible_crash_and_leak_llassetstorage.patch.diff -p1
+topic/fixes/thirdparty/0001_possible_crash_in_llviewerpartssim.diff -p1
+topic/fixes/thirdparty/1294_llworkerthread_when_terminating_program.patch.diff -p1
+topic/fixes/thirdparty/1857_apr_thread_mutex_nested.patch.diff -p1
+topic/fixes/thirdparty/2003_possible_crash_draganddrop.patch.diff -p1
+topic/fixes/thirdparty/2543_possible_crash_in_group_voting_propsals.patch.diff -p1
+topic/fixes/thirdparty/2683_possible_crash_update_speaker_list.patch.diff -p1
+topic/pandora/add_support_for_libcwd.diff -p1
diff --git a/debian/patches/topic/debian/71_use_debian_alternatives_for_www_browser.diff b/debian/patches/topic/debian/71_use_debian_alternatives_for_www_browser.diff
new file mode 100644
index 0000000..f748305
--- /dev/null
+++ b/debian/patches/topic/debian/71_use_debian_alternatives_for_www_browser.diff
@@ -0,0 +1,39 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/debian/71_use_debian_alternatives_for_www_browser
+
+Fix the launch_url.sh script to use the debian system prefered browser choice.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/newview/linux_tools/launch_url.sh |    8 ++++++++
+ 1 files changed, 8 insertions(+), 0 deletions(-)
+
+diff --git a/indra/newview/linux_tools/launch_url.sh b/indra/newview/linux_tools/launch_url.sh
+index d2c8919..33cee0e 100755
+--- a/indra/newview/linux_tools/launch_url.sh
++++ b/indra/newview/linux_tools/launch_url.sh
+@@ -8,6 +8,7 @@
+ # On Unixoids we try, in order of decreasing priority:
+ # - $BROWSER if set (preferred)
+ # - kfmclient openURL
++# - gnome-open
+ # - x-www-browser
+ # - opera
+ # - firefox
+@@ -54,6 +55,13 @@ if which kfmclient >/dev/null; then
+     exit
+ fi
+ 
++# else gnome-open
++# (embodies gnome concept of 'preferred browser')
++if which gnome-open  >/dev/null; then
++    gnome-open "$URL" &
++    exit
++fi
++
+ # else x-www-browser
+ # (Debianesque idea of a working X browser)
+ if which x-www-browser >/dev/null; then
+-- 
+tg: (c4044c3..) topic/debian/71_use_debian_alternatives_for_www_browser (depends on: master)
diff --git a/debian/patches/topic/debian/Allow_CXXFLAGS_to_specifiy_the_debug_flag.diff b/debian/patches/topic/debian/Allow_CXXFLAGS_to_specifiy_the_debug_flag.diff
new file mode 100644
index 0000000..6fef472
--- /dev/null
+++ b/debian/patches/topic/debian/Allow_CXXFLAGS_to_specifiy_the_debug_flag.diff
@@ -0,0 +1,43 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/debian/Allow_CXXFLAGS_to_specifiy_the_debug_flag
+
+Modify 00-Common.cmake to allow custom CXXFLAGS to take effect
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/cmake/00-Common.cmake |    5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
+index bf2d2c3..0d1092b 100644
+--- a/indra/cmake/00-Common.cmake
++++ b/indra/cmake/00-Common.cmake
+@@ -11,7 +11,7 @@ set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")
+ set(CMAKE_CXX_FLAGS_RELEASE
+     "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG")
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO 
+-    "-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
++    "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
+ 
+ 
+ # Don't bother with a MinSizeRel build.
+@@ -123,7 +123,6 @@ if (LINUX)
+       -fno-math-errno
+       -fno-strict-aliasing
+       -fsigned-char
+-      -g
+       -pthread
+       )
+ 
+@@ -158,7 +157,7 @@ if (LINUX)
+     endif (NOT STANDALONE)
+   endif (VIEWER)
+ 
+-  set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
++  set(CMAKE_CXX_FLAGS_DEBUG "-g -fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
+   set(CMAKE_CXX_FLAGS_RELEASE "-O2 ${CMAKE_CXX_FLAGS_RELEASE}")
+ endif (LINUX)
+ 
+-- 
+tg: (0c72528..) topic/debian/Allow_CXXFLAGS_to_specifiy_the_debug_flag (depends on: master)
diff --git a/debian/patches/topic/debian/VWR-8751-Build-with-a-shared-llmozlib2.diff b/debian/patches/topic/debian/VWR-8751-Build-with-a-shared-llmozlib2.diff
new file mode 100644
index 0000000..f9bb7f2
--- /dev/null
+++ b/debian/patches/topic/debian/VWR-8751-Build-with-a-shared-llmozlib2.diff
@@ -0,0 +1,32 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/debian/VWR-8751-Build-with-a-shared-llmozlib2
+
+This allows us to use a dynamic libllmozlib library.
+Upstream are not currently interested in this.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/cmake/Mozlib.cmake |    7 -------
+ 1 files changed, 0 insertions(+), 7 deletions(-)
+
+diff --git a/indra/cmake/Mozlib.cmake b/indra/cmake/Mozlib.cmake
+index e9555df..7073892 100644
+--- a/indra/cmake/Mozlib.cmake
++++ b/indra/cmake/Mozlib.cmake
+@@ -18,13 +18,6 @@ if (MOZLIB)
+         link_directories(${CMAKE_SOURCE_DIR}/newview/app_settings/mozilla-runtime-linux-${ARCH})
+         set(MOZLIB_LIBRARIES
+             llmozlib2
+-            mozjs
+-            nspr4
+-            plc4
+-            plds4
+-            xpcom
+-            xul
+-            profdirserviceprovider_s
+             )
+     elseif (WINDOWS)
+         if (MSVC71)
+-- 
+tg: (737df0b..) topic/debian/VWR-8751-Build-with-a-shared-llmozlib2 (depends on: master)
diff --git a/debian/patches/topic/debian/remove_as_needed.diff b/debian/patches/topic/debian/remove_as_needed.diff
new file mode 100644
index 0000000..f86e0bc
--- /dev/null
+++ b/debian/patches/topic/debian/remove_as_needed.diff
@@ -0,0 +1,39 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/debian/remove_as_needed
+
+This was needed to build on ubuntu, which i am keeping syncronised with as well.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/linux_crash_logger/CMakeLists.txt |    2 --
+ indra/newview/CMakeLists.txt            |    1 -
+ 2 files changed, 0 insertions(+), 3 deletions(-)
+
+diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt
+index 6f6754e..0711791 100644
+--- a/indra/linux_crash_logger/CMakeLists.txt
++++ b/indra/linux_crash_logger/CMakeLists.txt
+@@ -38,8 +38,6 @@ list(APPEND linux_crash_logger_SOURCE_FILES
+      ${linux_crash_logger_HEADER_FILES}
+      )
+ 
+-list(APPEND CMAKE_EXE_LINKER_FLAGS -Wl,--as-needed)
+-
+ add_executable(linux-crash-logger ${linux_crash_logger_SOURCE_FILES})
+ 
+ target_link_libraries(linux-crash-logger
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..8da6128 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -878,7 +878,6 @@ endif (DARWIN)
+ if (LINUX)
+     LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp)
+     LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp)
+-    LIST(APPEND CMAKE_EXE_LINKER_FLAGS -Wl,--as-needed)
+ 
+     set(viewer_LIBRARIES
+         Xinerama
+-- 
+tg: (c93c6d6..) topic/debian/remove_as_needed (depends on: master)
diff --git a/debian/patches/topic/debian/use_debian-included_fonts.diff b/debian/patches/topic/debian/use_debian-included_fonts.diff
new file mode 100644
index 0000000..53c95c1
--- /dev/null
+++ b/debian/patches/topic/debian/use_debian-included_fonts.diff
@@ -0,0 +1,44 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/debian/use_debian-included_fonts
+
+Choose fonts that are included on a debian system.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/newview/app_settings/settings.xml |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
+index 9dac926..d520f78 100644
+--- a/indra/newview/app_settings/settings.xml
++++ b/indra/newview/app_settings/settings.xml
+@@ -3477,7 +3477,7 @@
+       <key>Type</key>
+       <string>String</string>
+       <key>Value</key>
+-      <string>profontwindows.ttf</string>
++      <string>/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf</string>
+     </map>
+     <key>FontSansSerif</key>
+     <map>
+@@ -3488,7 +3488,7 @@
+       <key>Type</key>
+       <string>String</string>
+       <key>Value</key>
+-      <string>MtBkLfRg.ttf</string>
++      <string>/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf</string>
+     </map>
+     <key>FontSansSerifBold</key>
+     <map>
+@@ -3499,7 +3499,7 @@
+       <key>Type</key>
+       <string>String</string>
+       <key>Value</key>
+-      <string>MtBdLfRg.ttf</string>
++      <string>/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf</string>
+     </map>
+     <key>FontSansSerifFallback</key>
+     <map>
+-- 
+tg: (076afc1..) topic/debian/use_debian-included_fonts (depends on: master)
diff --git a/debian/patches/topic/debian/use_debian_channel.diff b/debian/patches/topic/debian/use_debian_channel.diff
new file mode 100644
index 0000000..a884ea4
--- /dev/null
+++ b/debian/patches/topic/debian/use_debian_channel.diff
@@ -0,0 +1,25 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/debian/use_debian_channel
+
+Patch to use a custom viewer channel to connect to the SecondLife servers
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llcommon/llversionviewer.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
+index 6ff2604..e6b1a0a 100644
+--- a/indra/llcommon/llversionviewer.h
++++ b/indra/llcommon/llversionviewer.h
+@@ -37,6 +37,6 @@ const S32 LL_VERSION_MINOR = 22;
+ const S32 LL_VERSION_PATCH = 1;
+ const S32 LL_VERSION_BUILD = 0;
+ 
+-const char * const LL_CHANNEL = "Second Life Release";
++const char * const LL_CHANNEL = "Open Metaverse Viewer";
+ 
+ #endif
+-- 
+tg: (77f403d..) topic/debian/use_debian_channel (depends on: master)
diff --git a/debian/patches/topic/debian/viewericon.diff b/debian/patches/topic/debian/viewericon.diff
new file mode 100644
index 0000000..813d3d3
--- /dev/null
+++ b/debian/patches/topic/debian/viewericon.diff
@@ -0,0 +1,717 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/debian/viewericon
+
+Adds an XPM icon to the build.
+This should be removed and the icon should be added directly in debian/ and not applied as a patch.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/newview/res/viewericon.xpm |  697 ++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 697 insertions(+), 0 deletions(-)
+
+diff --git a/indra/newview/res/viewericon.xpm b/indra/newview/res/viewericon.xpm
+new file mode 100644
+index 0000000..7cf88ad
+--- /dev/null
++++ b/indra/newview/res/viewericon.xpm
+@@ -0,0 +1,697 @@
++/* XPM */
++static char * viewericon_xpm[] = {
++"32 32 662 2",
++"  	c None",
++". 	c #2594FF",
++"+ 	c #2693FF",
++"@ 	c #2894FF",
++"# 	c #2996FF",
++"$ 	c #2B98FF",
++"% 	c #2C9AFF",
++"& 	c #2E99FF",
++"* 	c #319AFF",
++"= 	c #319BFF",
++"- 	c #329CFF",
++"; 	c #339EFF",
++"> 	c #349EFF",
++", 	c #329DFF",
++"' 	c #3099FF",
++") 	c #2D99FF",
++"! 	c #2A97FF",
++"~ 	c #2191FF",
++"{ 	c #2692FF",
++"] 	c #2994FF",
++"^ 	c #2A96FF",
++"/ 	c #2B9AFF",
++"( 	c #329BFF",
++"_ 	c #359FFF",
++": 	c #35A0FF",
++"< 	c #36A0FF",
++"[ 	c #359EFF",
++"} 	c #2E98FF",
++"| 	c #2293FF",
++"1 	c #2995FF",
++"2 	c #339DFF",
++"3 	c #369FFF",
++"4 	c #2D9AFF",
++"5 	c #2394FF",
++"6 	c #2F98FF",
++"7 	c #38A2FF",
++"8 	c #39A2FF",
++"9 	c #3BA4FF",
++"0 	c #3AA3FF",
++"a 	c #38A1FF",
++"b 	c #37A1FF",
++"c 	c #309AFF",
++"d 	c #2593FF",
++"e 	c #2997FF",
++"f 	c #349FFF",
++"g 	c #3BA3FF",
++"h 	c #3CA4FF",
++"i 	c #3EA6FF",
++"j 	c #3EA7FF",
++"k 	c #3FA7FF",
++"l 	c #2D91FE",
++"m 	c #298BFC",
++"n 	c #298AFA",
++"o 	c #2989FA",
++"p 	c #2889FA",
++"q 	c #2688F8",
++"r 	c #2486F8",
++"s 	c #2386F8",
++"t 	c #2488FA",
++"u 	c #2E96FE",
++"v 	c #2893FF",
++"w 	c #3DA5FF",
++"x 	c #3FA8FF",
++"y 	c #2F96FE",
++"z 	c #1978F4",
++"A 	c #136DEE",
++"B 	c #126AEB",
++"C 	c #1269EA",
++"D 	c #116AE9",
++"E 	c #106AE8",
++"F 	c #1069E6",
++"G 	c #1068E6",
++"H 	c #116AEA",
++"I 	c #1C7BF7",
++"J 	c #2A94FF",
++"K 	c #3AA2FF",
++"L 	c #3DA6FF",
++"M 	c #40ADFF",
++"N 	c #41AEFF",
++"O 	c #43B0FF",
++"P 	c #2D95FD",
++"Q 	c #1472EF",
++"R 	c #0F69E6",
++"S 	c #0D67E2",
++"T 	c #0D66E1",
++"U 	c #0C65E0",
++"V 	c #0C64E0",
++"W 	c #0C63E0",
++"X 	c #0E64E2",
++"Y 	c #1874F2",
++"Z 	c #2C96FF",
++"` 	c #2E97FE",
++" .	c #2A91FE",
++"..	c #2C93FE",
++"+.	c #2F94FE",
++"@.	c #3097FE",
++"#.	c #3098FE",
++"$.	c #3197FE",
++"%.	c #359BFE",
++"&.	c #40ACFF",
++"*.	c #44B1FF",
++"=.	c #45B2FF",
++"-.	c #46B2FF",
++";.	c #47B3FF",
++">.	c #3098FD",
++",.	c #1475EE",
++"'.	c #0E6AE6",
++").	c #0C69E2",
++"!.	c #0C68E1",
++"~.	c #0C67E0",
++"{.	c #0C66E0",
++"].	c #0B63E0",
++"^.	c #0E65E2",
++"/.	c #1876F2",
++"(.	c #2C97FF",
++"_.	c #309BFF",
++":.	c #1473F6",
++"<.	c #1069F3",
++"[.	c #106CF3",
++"}.	c #1069F4",
++"|.	c #1068F8",
++"1.	c #106CF8",
++"2.	c #106DF6",
++"3.	c #116EF6",
++"4.	c #1475F8",
++"5.	c #39A3FE",
++"6.	c #3099FE",
++"7.	c #1478F0",
++"8.	c #0E6CE7",
++"9.	c #0C6AE4",
++"0.	c #0E67E2",
++"a.	c #1878F3",
++"b.	c #319BFE",
++"c.	c #116DF4",
++"d.	c #106AF3",
++"e.	c #106AF4",
++"f.	c #1067F7",
++"g.	c #106BF8",
++"h.	c #106DF8",
++"i.	c #106DF5",
++"j.	c #1271F7",
++"k.	c #1577F8",
++"l.	c #36A0FE",
++"m.	c #319AFE",
++"n.	c #147AF0",
++"o.	c #0E6EE8",
++"p.	c #0C6CE6",
++"q.	c #0C68E2",
++"r.	c #0E68E4",
++"s.	c #1A7BF4",
++"t.	c #2D97FF",
++"u.	c #329CFE",
++"v.	c #126EF4",
++"w.	c #1068F5",
++"x.	c #1069F8",
++"y.	c #106EF8",
++"z.	c #106EF4",
++"A.	c #1270F7",
++"B.	c #1477F8",
++"C.	c #1578F8",
++"D.	c #369FFE",
++"E.	c #319BFD",
++"F.	c #1479EF",
++"G.	c #0E6EE7",
++"H.	c #0C6BE5",
++"I.	c #0F6AE6",
++"J.	c #1B7CF5",
++"K.	c #1270F4",
++"L.	c #106BF3",
++"M.	c #1374F8",
++"N.	c #369EFE",
++"O.	c #3099FB",
++"P.	c #1272E8",
++"Q.	c #0C6ADF",
++"R.	c #0C6AE0",
++"S.	c #0C6CE4",
++"T.	c #0F6AE7",
++"U.	c #1C7CF5",
++"V.	c #3EA5FF",
++"W.	c #329DFE",
++"X.	c #106DF7",
++"Y.	c #106EF5",
++"Z.	c #1271F8",
++"`.	c #116DF0",
++" +	c #0D62DE",
++".+	c #0D60DB",
++"++	c #257DF0",
++"@+	c #318CF6",
++"#+	c #318EF9",
++"$+	c #328EF9",
++"%+	c #2079EA",
++"&+	c #0B5ACA",
++"*+	c #0857C6",
++"=+	c #0A61D3",
++"-+	c #0C6CE5",
++";+	c #1C7AF5",
++">+	c #3A91FA",
++",+	c #3D94FA",
++"'+	c #3A92FA",
++")+	c #1969EC",
++"!+	c #1761EE",
++"~+	c #1764F0",
++"{+	c #1767EE",
++"]+	c #1868ED",
++"^+	c #1A6AEE",
++"/+	c #0D48BD",
++"(+	c #0A42AC",
++"_+	c #0B40AB",
++":+	c #164DCE",
++"<+	c #1D54DB",
++"[+	c #1D54DC",
++"}+	c #134AC5",
++"|+	c #083B9F",
++"1+	c #083CA2",
++"2+	c #0C4BB6",
++"3+	c #1261D4",
++"4+	c #1465DD",
++"5+	c #1365DE",
++"6+	c #1564DE",
++"7+	c #1766E2",
++"8+	c #2476EF",
++"9+	c #4599FC",
++"0+	c #469BFC",
++"a+	c #3A93FC",
++"b+	c #5273EE",
++"c+	c #5574EE",
++"d+	c #5272EC",
++"e+	c #2F53D4",
++"f+	c #2C4ED6",
++"g+	c #2C52D7",
++"h+	c #2C52D5",
++"i+	c #2E54D6",
++"j+	c #3053D4",
++"k+	c #1E3BA8",
++"l+	c #1C38A3",
++"m+	c #1D38A3",
++"n+	c #2C40BC",
++"o+	c #3545C6",
++"p+	c #3544C6",
++"q+	c #283EB6",
++"r+	c #1A349B",
++"s+	c #193398",
++"t+	c #1E3AA3",
++"u+	c #2A4FC1",
++"v+	c #2C55CA",
++"w+	c #2B55CC",
++"x+	c #2C55CC",
++"y+	c #2C55CD",
++"z+	c #2F56CF",
++"A+	c #3E61DA",
++"B+	c #5C78F0",
++"C+	c #5E79F2",
++"D+	c #5272F5",
++"E+	c #5573EE",
++"F+	c #5271EC",
++"G+	c #2C4ED5",
++"H+	c #2D52D3",
++"I+	c #2E55D4",
++"J+	c #3154D3",
++"K+	c #1E3AA7",
++"L+	c #1C39A2",
++"M+	c #1C38A2",
++"N+	c #2C42BC",
++"O+	c #3444C4",
++"P+	c #3344C3",
++"Q+	c #2D42BF",
++"R+	c #203AA9",
++"S+	c #1C36A2",
++"T+	c #2440B0",
++"U+	c #385DD0",
++"V+	c #3C63D6",
++"W+	c #3B62D6",
++"X+	c #3C62D7",
++"Y+	c #3D64D8",
++"Z+	c #4C6FE4",
++"`+	c #5C78EE",
++" @	c #5170F2",
++".@	c #5272EB",
++"+@	c #5273EB",
++"@@	c #5172EA",
++"#@	c #385CD9",
++"$@	c #2E51D4",
++"%@	c #2E54D4",
++"&@	c #2F54D2",
++"*@	c #3056D4",
++"=@	c #3256D2",
++"-@	c #1E3AA6",
++";@	c #1D39A2",
++">@	c #1F3BA9",
++",@	c #2C43BE",
++"'@	c #3244C2",
++")@	c #3244C1",
++"!@	c #3247C5",
++"~@	c #314CCA",
++"{@	c #385AD4",
++"]@	c #557DEF",
++"^@	c #557EEF",
++"/@	c #547DEE",
++"(@	c #517EEE",
++"_@	c #507EEE",
++":@	c #4C7AEC",
++"<@	c #4C78EA",
++"[@	c #4770EE",
++"}@	c #5072E7",
++"|@	c #5173E7",
++"1@	c #5474E6",
++"2@	c #5574E7",
++"3@	c #5575E8",
++"4@	c #5776E8",
++"5@	c #5978E9",
++"6@	c #5B78EA",
++"7@	c #3147C2",
++"8@	c #2D42BD",
++"9@	c #2C42BE",
++"0@	c #3043BE",
++"a@	c #3144BE",
++"b@	c #3144BF",
++"c@	c #3153CC",
++"d@	c #3058CD",
++"e@	c #3661D5",
++"f@	c #4F7DEC",
++"g@	c #507EEC",
++"h@	c #4D7EEB",
++"i@	c #4C7EEB",
++"j@	c #4B7FEA",
++"k@	c #4B7FE9",
++"l@	c #4A7EEA",
++"m@	c #467BE9",
++"n@	c #467AE5",
++"o@	c #4370E8",
++"p@	c #4E72E2",
++"q@	c #4F72E2",
++"r@	c #5072E2",
++"s@	c #5574E2",
++"t@	c #5877E5",
++"u@	c #5878E5",
++"v@	c #5978E6",
++"w@	c #5C7DE8",
++"x@	c #5D7CE9",
++"y@	c #2F48C0",
++"z@	c #2A42BA",
++"A@	c #2D41BA",
++"B@	c #3042BA",
++"C@	c #3043BA",
++"D@	c #3043B9",
++"E@	c #3046BD",
++"F@	c #2E57C8",
++"G@	c #2E58C8",
++"H@	c #3460D0",
++"I@	c #4F7DE8",
++"J@	c #4C7EE6",
++"K@	c #4A7FE6",
++"L@	c #4A7FE5",
++"M@	c #4A7FE4",
++"N@	c #477CE4",
++"O@	c #457AE4",
++"P@	c #4478DE",
++"Q@	c #406FE4",
++"R@	c #4B70DE",
++"S@	c #4D72DE",
++"T@	c #4E72DE",
++"U@	c #5073DD",
++"V@	c #5675DF",
++"W@	c #5676E1",
++"X@	c #587AE2",
++"Y@	c #5A7CE4",
++"Z@	c #2E48BB",
++"`@	c #2942B6",
++" #	c #2A42B6",
++".#	c #2E42B5",
++"+#	c #2E43B5",
++"@#	c #2E42B4",
++"##	c #2D44B6",
++"$#	c #2C56C4",
++"%#	c #2C58C4",
++"&#	c #3260CC",
++"*#	c #4B7DE2",
++"=#	c #497DE0",
++"-#	c #477DE0",
++";#	c #487DE0",
++">#	c #467EE0",
++",#	c #467EDF",
++"'#	c #457DDE",
++")#	c #437ADD",
++"!#	c #4279DD",
++"~#	c #4177D9",
++"{#	c #3E6EDE",
++"]#	c #486ED8",
++"^#	c #4B71D9",
++"/#	c #4B72D9",
++"(#	c #4D72D8",
++"_#	c #5374DA",
++":#	c #5475DB",
++"<#	c #5578DC",
++"[#	c #567ADD",
++"}#	c #2C48B7",
++"|#	c #2742B1",
++"1#	c #2A42B1",
++"2#	c #2C42B1",
++"3#	c #2C42B0",
++"4#	c #2B44B2",
++"5#	c #2A56BF",
++"6#	c #2A57BF",
++"7#	c #315EC7",
++"8#	c #467CDC",
++"9#	c #457CDA",
++"0#	c #447CDA",
++"a#	c #437CDA",
++"b#	c #437CD8",
++"c#	c #427CD8",
++"d#	c #427AD8",
++"e#	c #4077D7",
++"f#	c #3F76D5",
++"g#	c #3F75D4",
++"h#	c #3C6FD8",
++"i#	c #466ED2",
++"j#	c #486ED4",
++"k#	c #4A70D4",
++"l#	c #4A70D3",
++"m#	c #4E72D4",
++"n#	c #5174D6",
++"o#	c #5074D6",
++"p#	c #5276D6",
++"q#	c #5277D6",
++"r#	c #2A46B2",
++"s#	c #2540AC",
++"t#	c #2840AC",
++"u#	c #2A42AC",
++"v#	c #2A41AC",
++"w#	c #2A44AE",
++"x#	c #2955BA",
++"y#	c #2856BA",
++"z#	c #2E5EC2",
++"A#	c #447AD6",
++"B#	c #437AD5",
++"C#	c #417AD4",
++"D#	c #407AD2",
++"E#	c #3F79D1",
++"F#	c #3E78D0",
++"G#	c #3E76D1",
++"H#	c #3E75D2",
++"I#	c #3C74CF",
++"J#	c #3B73CE",
++"K#	c #3A6FD5",
++"L#	c #436CCC",
++"M#	c #456ECE",
++"N#	c #466FCE",
++"O#	c #4A71CE",
++"P#	c #4E73D0",
++"Q#	c #4E74D0",
++"R#	c #4F74D0",
++"S#	c #4E74CF",
++"T#	c #2846AD",
++"U#	c #2440A8",
++"V#	c #2340A8",
++"W#	c #2640A7",
++"X#	c #2740A7",
++"Y#	c #2841A7",
++"Z#	c #2843A9",
++"`#	c #2652B5",
++" $	c #2552B5",
++".$	c #2B5CBC",
++"+$	c #417AD0",
++"@$	c #3F79CE",
++"#$	c #3E78CC",
++"$$	c #3C76CA",
++"%$	c #3B76C8",
++"&$	c #3B74C9",
++"*$	c #3B74CC",
++"=$	c #3A73CD",
++"-$	c #3871CA",
++";$	c #3870C9",
++">$	c #386ED0",
++",$	c #426CC7",
++"'$	c #426CC9",
++")$	c #446EC9",
++"!$	c #466FC9",
++"~$	c #4A72CA",
++"{$	c #4C73CC",
++"]$	c #4B72CB",
++"^$	c #2E4FB0",
++"/$	c #2340A4",
++"($	c #223FA4",
++"_$	c #223FA3",
++":$	c #233FA3",
++"<$	c #2442A5",
++"[$	c #224FB0",
++"}$	c #2350B2",
++"|$	c #2E62BC",
++"1$	c #3E79CB",
++"2$	c #3B77C8",
++"3$	c #3A76C5",
++"4$	c #3873C2",
++"5$	c #3771C2",
++"6$	c #3771C5",
++"7$	c #3771C8",
++"8$	c #3770C6",
++"9$	c #3670C5",
++"0$	c #366FC6",
++"a$	c #346CCD",
++"b$	c #3F6BC2",
++"c$	c #406BC2",
++"d$	c #426DC4",
++"e$	c #426EC4",
++"f$	c #456FC4",
++"g$	c #4A72C6",
++"h$	c #4A73C7",
++"i$	c #4A72C7",
++"j$	c #466EC3",
++"k$	c #3E65BC",
++"l$	c #4065BD",
++"m$	c #4166BD",
++"n$	c #4066BD",
++"o$	c #4066BC",
++"p$	c #3F66BD",
++"q$	c #346BBF",
++"r$	c #356DC0",
++"s$	c #3B76C6",
++"t$	c #3B78C4",
++"u$	c #3874C1",
++"v$	c #3672BE",
++"w$	c #3570BD",
++"x$	c #346EBF",
++"y$	c #346EC1",
++"z$	c #346DC1",
++"A$	c #346CC0",
++"B$	c #346DC0",
++"C$	c #346EC2",
++"D$	c #316AC9",
++"E$	c #3C6ABE",
++"F$	c #3D6BBE",
++"G$	c #3F6CC0",
++"H$	c #416CC0",
++"I$	c #426DC0",
++"J$	c #4570C0",
++"K$	c #4872C2",
++"L$	c #4A76C4",
++"M$	c #4E79C7",
++"N$	c #4F7AC7",
++"O$	c #507AC8",
++"P$	c #4E79C8",
++"Q$	c #3D79C4",
++"R$	c #3C7AC4",
++"S$	c #3A79C2",
++"T$	c #3776BF",
++"U$	c #3572BB",
++"V$	c #336FBA",
++"W$	c #326DBB",
++"X$	c #326CBD",
++"Y$	c #326ABD",
++"Z$	c #3169BB",
++"`$	c #3169BA",
++" %	c #316ABB",
++".%	c #2E66C3",
++"+%	c #396ABA",
++"@%	c #3C6BBA",
++"#%	c #3C6ABB",
++"$%	c #3E6CBD",
++"%%	c #406CBD",
++"&%	c #406DBD",
++"*%	c #426EBD",
++"=%	c #456FBD",
++"-%	c #4672BF",
++";%	c #4672C0",
++">%	c #4874C0",
++",%	c #4976C1",
++"'%	c #4B78C2",
++")%	c #4C78C3",
++"!%	c #4E78C3",
++"~%	c #4B78C3",
++"{%	c #3C78C1",
++"]%	c #3A79C1",
++"^%	c #3778BE",
++"/%	c #3673BA",
++"(%	c #326EB8",
++"_%	c #326DBA",
++":%	c #326BBB",
++"<%	c #316ABA",
++"[%	c #2F68B9",
++"}%	c #2E66B8",
++"|%	c #3067BB",
++"1%	c #2C63BF",
++"2%	c #3769B8",
++"3%	c #3969B8",
++"4%	c #3B6AB8",
++"5%	c #3C6AB8",
++"6%	c #3E6CBA",
++"7%	c #3F6DBA",
++"8%	c #416DBA",
++"9%	c #446FBB",
++"0%	c #4672BC",
++"a%	c #4672BD",
++"b%	c #4674BC",
++"c%	c #4674BD",
++"d%	c #4775BE",
++"e%	c #4575BE",
++"f%	c #3A76C0",
++"g%	c #3776BE",
++"h%	c #3573BB",
++"i%	c #326EB6",
++"j%	c #306CB7",
++"k%	c #316CBB",
++"l%	c #3068B8",
++"m%	c #2E66B9",
++"n%	c #2E66BA",
++"o%	c #3068BE",
++"p%	c #2B62C0",
++"q%	c #3769B6",
++"r%	c #3A68B6",
++"s%	c #3B69B6",
++"t%	c #406DBA",
++"u%	c #436EBA",
++"v%	c #4571BB",
++"w%	c #4372BC",
++"x%	c #3774BE",
++"y%	c #3875C3",
++"z%	c #316DB6",
++"A%	c #2F6BB5",
++"B%	c #306BB9",
++"C%	c #326ABB",
++"D%	c #3169BD",
++"E%	c #3169BF",
++"F%	c #3169C0",
++"G%	c #3067BE",
++"H%	c #2E66BC",
++"I%	c #285FBC",
++"J%	c #3667B5",
++"K%	c #3768B6",
++"L%	c #3C6BB9",
++"M%	c #416EBA",
++"N%	c #4470BA",
++"O%	c #4570BB",
++"P%	c #3873BD",
++"Q%	c #3A76C6",
++"R%	c #3974C3",
++"S%	c #336FBC",
++"T%	c #316CB9",
++"U%	c #326CBB",
++"V%	c #336CBD",
++"W%	c #346CC2",
++"X%	c #326AC2",
++"Y%	c #3068C1",
++"Z%	c #2B64B8",
++"`%	c #245AB6",
++" &	c #3466B5",
++".&	c #3668B5",
++"+&	c #3868B6",
++"@&	c #3F6CBA",
++"#&	c #426FBA",
++"$&	c #436FBA",
++"%&	c #4271BA",
++"&&	c #3772BB",
++"*&	c #3975C3",
++"=&	c #3974C4",
++"-&	c #3772C2",
++";&	c #346FBF",
++">&	c #326CBC",
++",&	c #3169BC",
++"'&	c #2D65BC",
++")&	c #2961B5",
++"!&	c #2861B4",
++"~&	c #2056B2",
++". . + @ # $ % % & * * * = - - ; ; > > ; , - - * * * ' ) % % ! ~ ",
++". { ] ^ / % ) ' * * ( , > > _ : < < < : : [ > ; - * * * } % % | ",
++"+ 1 ^ % % & * * ( 2 > 3 < < < < < < < < < < < 3 _ > - * * ' 4 5 ",
++"@ ^ % % 6 * * - > 3 < < < < 7 8 9 9 0 0 a b < < < < [ ; = * c d ",
++"e / % ' * * , f < < < 7 g h i j j j j j i i 9 8 b < < 3 > - * + ",
++"$ % & * * ; [ < < a 9 i j k k k k h l m n o p p q r s t u > - v ",
++"% ) * * , _ < < 8 w k k k k k k x y z A B C D E F G G H I [ > J ",
++"% ' * , [ < < K L k k k k x M N O P Q R S T U U V W W X Y > < Z ",
++"& * = `  . ...+. at .#.$.%.&.*.=.-.;.>.,.'.).!.~.{.U ].].^./.< < (.",
++"c * _.:.<.[.}.|.1.2.3.4.5.;.;.;.;.6.7.8.9.).).!.{.U V 0.a.8 b (.",
++"* ( b.c.d.e.f.g.h.i.j.k.l.;.;.;.;.m.n.o.p.p.9.).q.{.{.r.s.h b t.",
++"* , u.v.[.w.x.y.z.A.B.C.D.;.;.;.;.E.F.G.p.p.p.H.).q.~.I.J.w 9 } ",
++"* > u.K.L.f.1.2.3.M.C.C.N.;.;.;.;.O.P.Q.R.S.p.p.H.).).T.U.V.w 6 ",
++"- > W.K.w.|.X.Y.Z.`. +.+++ at +@+#+$+%+&+*+=+Q.-+p.p.9.).E ;+V.i - ",
++">+,+'+)+!+~+{+]+^+/+(+_+:+<+<+[+[+}+|+1+2+3+4+5+5+5+6+7+8+9+0+a+",
++"b+c+d+e+f+g+h+i+j+k+l+m+n+o+o+o+p+q+r+s+t+u+v+w+w+x+y+z+A+B+C+D+",
++"b+E+F+e+G+h+H+I+J+K+L+M+N+O+O+P+P+Q+R+S+T+U+V+V+W+W+X+Y+Z+`+`+ @",
++". at +@@@#@$@%@&@*@=@-@;@>@,@'@)@)@)@)@!@~@{@]@^@/@(@(@_ at _@_@:@<@[@",
++"}@|@|@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at a@a at a@b at c@d at e@f at g@h at i@j at j@k at l@m at n@o@",
++"p at q@r at s@t at u@v at w@x at y@z at A@B at C@D at D@D at E@F at G@H at I@J at K@L at L@L at M@N at O@P at Q@",
++"R at S@T at U@V at W@W at X@Y at Z@`@ #.#+#+#+#@###$#%#&#*#=#-#;#>#,#'#)#!#~#{#",
++"]#^#/#(#_#:#:#<#[#}#|#|#1#2#2#3#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#",
++"i#j#k#l#m#n#o#p#q#r#s#s#s#t#u#v#u#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#",
++"L#M#N#N#O#P#Q#R#S#T#U#U#V#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>$",
++",$'$)$)$!$~${${$]$^$/$($_$_$_$_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$0$a$",
++"b$c$d$e$e$f$g$h$i$j$k$l$m$m$n$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$",
++"E$F$G$H$I$I$J$K$K$K$K$L$M$N$O$O$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %Y$.%",
++"+%@%#%$%%%&%*%=%-%;%;%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%}%}%|%1%",
++"2%3%4%5%6%7%7%8%9%0%a%a%0%0%b%c%d%e%f%g%h%i%j%k%<%l%}%m%m%n%o%p%",
++"q%q%r%s%5%6%7%7%t%u%v%0%0%0%0%0%0%w%x%y%v$z%A%B%C%Z$D%E%F%G%H%I%",
++"J%q%K%s%s%L%6%7%7%7%M%N%O%0%0%0%0%w%P%Q%R%S%T%U%V%A$W%X%Y%H%Z%`%",
++" &.&q%+&s%s%5%6%@&7%7%t%t%#&$&N%N%%&&&*&=&-&;&>&C%,&o%'&)&!&!&~&"};
+-- 
+tg: (9bdb1d1..) topic/debian/viewericon (depends on: master)
diff --git a/debian/patches/topic/features/jira-backported/VWR-5082_set_bulk_inv_permissions.diff b/debian/patches/topic/features/jira-backported/VWR-5082_set_bulk_inv_permissions.diff
new file mode 100644
index 0000000..0751070
--- /dev/null
+++ b/debian/patches/topic/features/jira-backported/VWR-5082_set_bulk_inv_permissions.diff
@@ -0,0 +1,965 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/features/jira-backported/VWR-5082_set_bulk_inv_permissions
+
+This is applied upstream (in a feature branch) and allows multiple object inventory items to have permissions set in one go.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/newview/CMakeLists.txt                       |    1 +
+ indra/newview/llfloaterbulkpermission.cpp          |  594 ++++++++++++++++++++
+ indra/newview/llfloaterbulkpermission.h            |  143 +++++
+ indra/newview/llviewermenu.cpp                     |   12 +
+ .../skins/default/xui/en-us/floater_bulk_perms.xml |  127 +++++
+ .../skins/default/xui/en-us/menu_viewer.xml        |    5 +
+ 6 files changed, 882 insertions(+), 0 deletions(-)
+
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..7f3f9ab 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -126,6 +126,7 @@ set(viewer_SOURCE_FILES
+     llfloateravatartextures.cpp
+     llfloaterbeacons.cpp
+     llfloaterbuildoptions.cpp
++    llfloaterbulkpermission.cpp
+     llfloaterbump.cpp
+     llfloaterbuycontents.cpp
+     llfloaterbuy.cpp
+diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
+new file mode 100644
+index 0000000..e66d1af
+--- /dev/null
++++ b/indra/newview/llfloaterbulkpermission.cpp
+@@ -0,0 +1,594 @@
++/** 
++ * @file llfloaterbulkpermissions.cpp
++ * @brief A floater which allows task inventory item's properties to be changed on mass.
++ *
++ * $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://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$
++ */
++
++/* Allow multiple task inventory properties to be set in one go, by Michelle2 Zenovka */
++
++/* TODO
++	
++	* Add in the option to select objects or task inventory
++s
++
++It would be nice to set the permissions on groups of prims as well as task inventory
++
++*/
++
++
++#include "llviewerprecompiledheaders.h"
++#include "llfloaterbulkpermission.h"
++#include "llagent.h"
++#include "llchat.h"
++#include "llviewerwindow.h"
++#include "llviewerobject.h"
++#include "llviewerobjectlist.h"
++#include "llviewerregion.h"
++#include "lscript_rt_interface.h"
++#include "llviewercontrol.h"
++#include "llviewerobject.h"
++#include "llviewerregion.h"
++#include "llresmgr.h"
++#include "llbutton.h"
++#include "lldir.h"
++#include "llfloaterchat.h"
++#include "llviewerstats.h"
++#include "lluictrlfactory.h"
++#include "llselectmgr.h"
++#include "llinventory.h"
++
++
++#include <algorithm>
++#include <functional>
++#include "llcachename.h"
++#include "lldbstrings.h"
++#include "llinventory.h"
++
++#include "llagent.h"
++#include "llbutton.h"
++#include "llcheckboxctrl.h"
++#include "llfloateravatarinfo.h"
++#include "llfloatergroupinfo.h"
++#include "llinventorymodel.h"
++#include "lllineeditor.h"
++#include "llradiogroup.h"
++#include "llresmgr.h"
++#include "roles_constants.h"
++#include "llselectmgr.h"
++#include "lltextbox.h"
++#include "lluiconstants.h"
++#include "llviewerinventory.h"
++#include "llviewerobjectlist.h"
++#include "llviewerregion.h"
++#include "llviewercontrol.h"
++
++#include "lluictrlfactory.h"
++
++
++const char* BULKPERM_QUEUE_TITLE = "Update Progress";
++const char* BULKPERM_START_STRING = "update";
++
++namespace
++{
++	struct BulkQueueObjects : public LLSelectedObjectFunctor
++	{
++		BOOL scripted;
++		BOOL modifiable;
++		LLFloaterBulkPermission* mQueue;
++		BulkQueueObjects(LLFloaterBulkPermission* q) : mQueue(q), scripted(FALSE), modifiable(FALSE) {}
++		virtual bool apply(LLViewerObject* obj)
++		{
++			scripted = obj->flagScripted();
++			modifiable = obj->permModify();
++
++			mQueue->addObject(obj->getID());
++			return false;
++			
++		}
++	};
++}
++
++///----------------------------------------------------------------------------
++/// Class LLFloaterBulkPermission
++///----------------------------------------------------------------------------
++
++// static
++LLMap<LLUUID, LLFloaterBulkPermission*> LLFloaterBulkPermission::sInstances;
++
++
++// Default constructor
++LLFloaterBulkPermission::LLFloaterBulkPermission(const std::string& name,
++											 const LLRect& rect,
++											 const char* title,
++											 const char* start_string) :
++	LLFloater(name, rect, title,
++			  RESIZE_YES, DEFAULT_MIN_WIDTH, DEFAULT_MIN_HEIGHT,
++			  DRAG_ON_TOP, MINIMIZE_YES, CLOSE_YES)
++{
++
++	req_perm_mask=0; // This should match the default state the checkboxes are set to
++	recurse=false;
++
++	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_bulk_perms.xml");
++
++	childSetAction("Apply...",onApplyBtn,this);
++	childSetEnabled("Apply...",TRUE);
++
++	childSetCommitCallback("Modify",&onCommitPermissions, this);
++	childSetCommitCallback("Trans",&onCommitPermissions, this);
++	childSetCommitCallback("Copy",&onCommitPermissions, this);
++
++	//childSetCommitCallback("Recurse",&onRecurse, this);
++
++	childSetCommitCallback("Parent",&onParent, this);
++
++	childSetCommitCallback("objects",&InvSelection, this);
++	childSetCommitCallback("scripts",&InvSelection, this);
++	childSetCommitCallback("textures",&InvSelection, this);
++	childSetCommitCallback("sounds",&InvSelection, this);
++	childSetCommitCallback("animations",&InvSelection, this);
++	childSetCommitCallback("notecards",&InvSelection, this);
++	childSetCommitCallback("landmarks",&InvSelection, this);
++	childSetCommitCallback("bodyparts",&InvSelection, this);
++	childSetCommitCallback("clothing",&InvSelection, this);
++	childSetCommitCallback("gestures",&InvSelection, this);
++
++	//Set variable state to XUI default state consistancy
++	processObject=getChild<LLCheckBoxCtrl>("objects")->get();
++	processScript=getChild<LLCheckBoxCtrl>("scripts")->get();
++	processTexture=getChild<LLCheckBoxCtrl>("textures")->get();
++	processSound=getChild<LLCheckBoxCtrl>("sounds")->get();
++	processAnimation=getChild<LLCheckBoxCtrl>("animations")->get();
++	processNotecard=getChild<LLCheckBoxCtrl>("notecards")->get();
++	processGesture=getChild<LLCheckBoxCtrl>("gestures")->get();
++	processClothing=getChild<LLCheckBoxCtrl>("clothing")->get();
++	processBodypart=getChild<LLCheckBoxCtrl>("bodyparts")->get();
++	processLandmark=getChild<LLCheckBoxCtrl>("landmarks")->get();
++	parent=getChild<LLCheckBoxCtrl>("Parent")->get();
++
++
++	setTitle(title);
++	
++	if (!getHost())
++	{
++		LLRect curRect = getRect();
++		translate(rect.mLeft - curRect.mLeft, rect.mTop - curRect.mTop);
++	}
++	
++	mStartString = start_string;
++	mDone = FALSE;
++	sInstances.addData(mID, this);
++
++}
++
++void LLFloaterBulkPermission::doApply()
++{
++	// Its alive now do the nasty work that the ScriptQueue and friends try to do in the menu code
++	// but first grab the user options
++
++	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
++	list->deleteAllItems();
++
++	//Apply to selected objects if requested first
++
++	if(parent)
++	{
++		llinfos<< "Setting permission on parent items" << llendl;
++		LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_NEXT_OWNER,true, req_perm_mask);
++		LLSelectMgr::getInstance()->selectionSetObjectPermissions(PERM_NEXT_OWNER,false, ~req_perm_mask); //How annoying need to set and unset
++	}
++
++
++	LLFloaterBulkPermission* q;
++	q=(LLFloaterBulkPermission*)this;
++
++	BulkQueueObjects func(q);
++	bool fail = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&func);
++	if(fail)
++	{
++		if ( !func.modifiable )
++		{
++			gViewerWindow->alertXml("NO MODIFY");
++		}
++		else
++		{
++			llwarns << "Bad logic. Are there actualy any items in that prim?" << llendl;
++		}
++	}
++	else
++	{
++		if (!q->start())
++		{
++			llwarns << "Unexpected failure attepmting to set permissions." << llendl;
++		}
++	}
++}
++
++// Destroys the object
++LLFloaterBulkPermission::~LLFloaterBulkPermission()
++{
++	sInstances.removeData(mID);
++}
++
++// find an instance by ID. Return NULL if it does not exist.
++// static
++LLFloaterBulkPermission* LLFloaterBulkPermission::findInstance(const LLUUID& id)
++{
++	if(sInstances.checkData(id))
++	{
++		return sInstances.getData(id);
++	}
++	return NULL;
++}
++
++
++// This is the callback method for the viewer object currently being
++// worked on.
++// NOT static, virtual!
++void LLFloaterBulkPermission::inventoryChanged(LLViewerObject* viewer_object,
++											 InventoryObjectList* inv,
++											 S32,
++											 void* q_id)
++{
++	llinfos << "LLFloaterBulkPermission::inventoryChanged() for  object "
++			<< viewer_object->getID() << llendl;
++
++	//Remove this listener from the object since its
++	//listener callback is now being executed.
++	
++	//We remove the listener here because the function
++	//removeVOInventoryListener removes the listener from a ViewerObject
++	//which it internally stores.
++	
++	//If we call this further down in the function, calls to handleInventory
++	//and nextObject may update the interally stored viewer object causing
++	//the removal of the incorrect listener from an incorrect object.
++	
++	//Fixes SL-6119:Recompile scripts fails to complete
++	removeVOInventoryListener();
++
++	if (viewer_object && inv && (viewer_object->getID() == mCurrentObjectID) )
++	{
++		handleInventory(viewer_object, inv);
++	}
++	else
++	{
++		// something went wrong...
++		// note that we're not working on this one, and move onto the
++		// next object in the list.
++		llwarns << "No inventory for " << mCurrentObjectID
++				<< llendl;
++		nextObject();
++	}
++}
++
++void LLFloaterBulkPermission::onApplyBtn(void* user_data)
++{
++	LLFloaterBulkPermission* self = (LLFloaterBulkPermission*)user_data;
++	self->doApply();
++}
++
++
++// static
++void LLFloaterBulkPermission::InvSelection(LLUICtrl* ctrl, void* data)
++{
++	LLFloaterBulkPermission* self = (LLFloaterBulkPermission*)data;
++
++	self->processObject=self->getChild<LLCheckBoxCtrl>("objects")->get();
++	self->processScript=self->getChild<LLCheckBoxCtrl>("scripts")->get();
++	self->processTexture=self->getChild<LLCheckBoxCtrl>("textures")->get();
++	self->processSound=self->getChild<LLCheckBoxCtrl>("sounds")->get();
++	self->processAnimation=self->getChild<LLCheckBoxCtrl>("animations")->get();
++	self->processNotecard=self->getChild<LLCheckBoxCtrl>("notecards")->get();
++	self->processGesture=self->getChild<LLCheckBoxCtrl>("gestures")->get();
++	self->processClothing=self->getChild<LLCheckBoxCtrl>("clothing")->get();
++	self->processBodypart=self->getChild<LLCheckBoxCtrl>("bodyparts")->get();
++	self->processLandmark=self->getChild<LLCheckBoxCtrl>("landmarks")->get();
++
++
++}
++
++// static
++void LLFloaterBulkPermission::onParent(LLUICtrl* ctrl, void* data)
++{
++	LLFloaterBulkPermission* self = (LLFloaterBulkPermission*)data;
++	self->parent=self->getChild<LLCheckBoxCtrl>("Parent")->get();
++}
++
++// static
++void LLFloaterBulkPermission::onRecurse(LLUICtrl* ctrl, void* data)
++{
++	LLFloaterBulkPermission* self = (LLFloaterBulkPermission*)data;
++	self->recurse=self->getChild<LLCheckBoxCtrl>("Recurse")->get();
++}
++
++// static
++void LLFloaterBulkPermission::onCommitPermissions(LLUICtrl* ctrl, void* data)
++{
++	LLFloaterBulkPermission* self = (LLFloaterBulkPermission*)data;
++	LLCheckBoxCtrl* CheckModify = self->getChild<LLCheckBoxCtrl>("Modify");
++	LLCheckBoxCtrl* CheckCopy = self->getChild<LLCheckBoxCtrl>("Copy");
++	LLCheckBoxCtrl* CheckTrans = self->getChild<LLCheckBoxCtrl>("Trans");
++
++	self->req_perm_mask=0;
++
++	if(CheckModify->get())
++	{
++		self->req_perm_mask|=PERM_MODIFY;
++	}
++	else
++	{
++		self->req_perm_mask&=~PERM_MODIFY;
++	}
++
++	if(CheckCopy->get())
++	{
++		self->req_perm_mask|=PERM_COPY;
++	}
++	else
++	{
++		self->req_perm_mask&=~PERM_COPY;
++	}
++
++	if(CheckTrans->get())
++	{
++		self->req_perm_mask|=PERM_TRANSFER;
++	}
++	else
++	{
++		self->req_perm_mask&=~PERM_TRANSFER;
++	}
++
++
++}
++
++void LLFloaterBulkPermission::addObject(const LLUUID& id)
++{
++	mObjectIDs.put(id);
++}
++
++BOOL LLFloaterBulkPermission::start()
++{
++	llinfos << "LLFloaterBulkPermission::start()" << llendl;
++	char buffer[MAX_STRING]; 				/*Flawfinder: ignore*/
++	snprintf(buffer, sizeof(buffer), "Starting %s of %d items.", mStartString, mObjectIDs.count()); 		/* Flawfinder: ignore */
++
++	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
++	list->addCommentText(buffer);
++
++	return nextObject();
++}
++
++BOOL LLFloaterBulkPermission::isDone() const
++{
++	return (mCurrentObjectID.isNull() || (mObjectIDs.count() == 0));
++}
++
++// go to the next object. If no objects left, it falls out silently
++// and waits to be killed by the window being closed.
++BOOL LLFloaterBulkPermission::nextObject()
++{
++	S32 count;
++	BOOL successful_start = FALSE;
++	do
++	{
++		count = mObjectIDs.count();
++		llinfos << "LLFloaterBulkPermission::nextObject() - " << count
++				<< " objects left to process." << llendl;
++		mCurrentObjectID.setNull();
++		if(count > 0)
++		{
++			successful_start = popNext();
++		}
++		llinfos << "LLFloaterBulkPermission::nextObject() "
++				<< (successful_start ? "successful" : "unsuccessful")
++				<< llendl; 
++	} while((mObjectIDs.count() > 0) && !successful_start);
++
++	if(isDone() && !mDone)
++	{
++		
++		LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
++		mDone = TRUE;
++		char buffer[MAX_STRING];		/*Flawfinder: ignore*/
++		snprintf(buffer, sizeof(buffer), "Done.");				/* Flawfinder: ignore */
++		list->addCommentText(buffer);
++
++	}
++	return successful_start;
++}
++
++// returns true if the queue has started, otherwise false.  This
++// method pops the top object off of the queue.
++BOOL LLFloaterBulkPermission::popNext()
++{
++	// get the first element off of the container, and attempt to get
++	// the inventory.
++	BOOL rv = FALSE;
++	S32 count = mObjectIDs.count();
++	if(mCurrentObjectID.isNull() && (count > 0))
++	{
++		mCurrentObjectID = mObjectIDs.get(0);
++		llinfos << "LLFloaterBulkPermission::popNext() - mCurrentID: "
++				<< mCurrentObjectID << llendl;
++		mObjectIDs.remove(0);
++		LLViewerObject* obj = gObjectList.findObject(mCurrentObjectID);
++		if(obj)
++		{
++			llinfos << "LLFloaterBulkPermission::popNext() requesting inv for "
++					<< mCurrentObjectID << llendl;
++			LLUUID* id = new LLUUID(mID);
++
++			registerVOInventoryListener(obj,id);
++			requestVOInventory();
++			rv = TRUE;
++		}
++		else
++		{
++			llinfos<<"LLFloaterBulkPermission::popNext() returned a NULL LLViewerObject" <<llendl;
++			//Arrrg what do we do here?
++		}
++	}
++
++	return rv;
++}
++
++
++// static
++LLFloaterBulkPermission* LLFloaterBulkPermission::create()
++{
++	S32 left, top;
++	gFloaterView->getNewFloaterPosition(&left, &top);
++	LLRect rect = gSavedSettings.getRect("CompileOutputRect");
++	rect.translate(left - rect.mLeft, top - rect.mTop);
++	LLFloaterBulkPermission* new_queue = new LLFloaterBulkPermission("queue",rect,"Setting Bulk permissions","Results");
++	new_queue->open();	 /*Flawfinder: ignore*/
++	return new_queue;
++}
++
++
++void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, InventoryObjectList* inv)
++{
++	// find all of the lsl, leaving off duplicates. We'll remove
++	// all matching asset uuids on compilation success.
++
++	llinfos<<"handleInventory"<<llendl;
++
++	char buffer[MAX_STRING];		 /*Flawfinder: ignore*/
++	LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
++
++	InventoryObjectList::const_iterator it = inv->begin();
++	InventoryObjectList::const_iterator end = inv->end();
++	for ( ; it != end; ++it)
++	{
++		llinfos<<"Doing iterator of inventory"<<llendl;
++
++		if(  ( (*it)->getType() == LLAssetType::AT_LSL_TEXT && processScript) ||
++  		     ( (*it)->getType() == LLAssetType::AT_TEXTURE && processTexture) ||
++	             ( (*it)->getType() == LLAssetType::AT_SOUND && processSound) ||
++	             ( (*it)->getType() == LLAssetType::AT_LANDMARK && processLandmark) ||
++    		     ( (*it)->getType() == LLAssetType::AT_CLOTHING && processClothing) ||
++    		     ( (*it)->getType() == LLAssetType::AT_OBJECT && processObject) ||
++   		     ( (*it)->getType() == LLAssetType::AT_NOTECARD && processNotecard) ||
++   		     ( (*it)->getType() == LLAssetType::AT_BODYPART && processBodypart) ||
++   		     ( (*it)->getType() == LLAssetType::AT_ANIMATION && processAnimation) ||
++   		     ( (*it)->getType() == LLAssetType::AT_GESTURE && processGesture))
++		{
++
++			LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
++
++			if (object)
++			{
++				LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
++				LLViewerInventoryItem* new_item = (LLViewerInventoryItem*)item;
++				LLPermissions perm(new_item->getPermissions());
++
++				// chomp the inventory name so it fits in the scroll window nicely
++				// and the user can see the [OK]
++				std::string invname;
++				invname=item->getName().substr(0,item->getName().size() < 30 ? item->getName().size() : 30 );
++				
++				// My attempt at checking valid permissions, CHECK ME
++				// note its not actually bad to try to set permissions that are not allowed as the
++				// server will protect against this, but it will piss the user off if its wrong
++				if(
++				(perm.getCreator()==gAgentID) ||
++				(perm.getMaskOwner() & PERM_TRANSFER) && (perm.getMaskOwner() & PERM_MODIFY) || 
++				(gAgent.getGroupID()==perm.getGroup() && (perm.getMaskGroup() & PERM_TRANSFER) && (perm.getMaskGroup() & PERM_MODIFY))
++				){	
++					llinfos<<"Setting perms"<<llendl;
++					perm.setMaskNext(req_perm_mask);
++					new_item->setPermissions(perm);
++					updateInventory(object,new_item,TASK_INVENTORY_ITEM_KEY,FALSE);				
++					snprintf(buffer, sizeof(buffer), "Setting perms on '%s' [OK]", invname.c_str());		 	/* Flawfinder: ignore */
++				}
++				else
++				{
++					llinfos<<"NOT setting perms"<<llendl;
++					snprintf(buffer, sizeof(buffer), "Setting perms on '%s' [FAILED]", invname.c_str());		 	/* Flawfinder: ignore */
++
++				}
++				
++				list->addCommentText(buffer);
++
++				if(recurse &&  ( (*it)->getType() == LLAssetType::AT_OBJECT && processObject))
++				{
++					//Add this object back to the queue to be processed as it has inventory
++					snprintf(buffer, sizeof(buffer), "Queueing object '%s' for open", invname.c_str());
++					llwarns << "Queueing object "<<	invname.c_str() << " ID "<< (*it)->getUUID()<<llendl;
++					mObjectIDs.put((*it)->getUUID());
++					// This will not YET work. as this is not a viewer object the unpack will fail			
++				}
++
++			}
++		}
++	}
++
++	nextObject();	
++}
++
++
++// Avoid inventory callbacks etc by just fire and forgetting the message with the permissions update
++// we could do this via LLViewerObject::updateInventory but that uses inventory call backs and buggers
++// us up and we would have a dodgy item iterator
++
++void LLFloaterBulkPermission::updateInventory(
++	LLViewerObject* object,
++	LLViewerInventoryItem* item,
++	U8 key,
++	bool is_new)
++{
++	LLMemType mt(LLMemType::MTYPE_OBJECT);
++	
++
++	// This slices the object into what we're concerned about on the
++	// viewer. The simulator will take the permissions and transfer
++	// ownership.
++	LLPointer<LLViewerInventoryItem> task_item =
++		new LLViewerInventoryItem(item->getUUID(), mID, item->getPermissions(),
++								  item->getAssetUUID(), item->getType(),
++								  item->getInventoryType(),
++								  item->getName(), item->getDescription(),
++								  item->getSaleInfo(),
++								  item->getFlags(),
++								  item->getCreationDate());
++	task_item->setTransactionID(item->getTransactionID());
++	LLMessageSystem* msg = gMessageSystem;
++	msg->newMessageFast(_PREHASH_UpdateTaskInventory);
++	msg->nextBlockFast(_PREHASH_AgentData);
++	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
++	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
++	msg->nextBlockFast(_PREHASH_UpdateData);
++	msg->addU32Fast(_PREHASH_LocalID, object->mLocalID);
++	msg->addU8Fast(_PREHASH_Key, key);
++	msg->nextBlockFast(_PREHASH_InventoryData);
++	task_item->packMessage(msg);
++	msg->sendReliable(object->getRegion()->getHost());
++
++}
++
+diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h
+new file mode 100644
+index 0000000..3de871b
+--- /dev/null
++++ b/indra/newview/llfloaterbulkpermission.h
+@@ -0,0 +1,143 @@
++/** 
++ * @file llfloaterbulkpermissions.h
++ * @brief A floater which allows task inventory item's properties to be changed on mass.
++ *
++ * $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://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$
++ */
++
++/* Allow multiple task inventory properties to be set in one go, by Michelle2 Zenovka */
++
++#ifndef LL_LLBULKPERMISSION_H
++#define LL_LLBULKPERMISSION_H
++
++#include "lldarray.h"
++#include "llinventory.h"
++#include "llviewerobject.h"
++#include "llvoinventorylistener.h"
++#include "llmap.h"
++#include "lluuid.h"
++
++#include "llfloater.h"
++#include "llscrolllistctrl.h"
++
++#include "llviewerinventory.h"
++
++class LLFloaterBulkPermission : public LLFloater, public LLVOInventoryListener
++{
++public:
++	// addObject() accepts an object id.
++	void addObject(const LLUUID& id);
++
++	// start() returns TRUE if the queue has started, otherwise FALSE.
++	BOOL start();
++
++	// Use this method to create a reset queue. Once created, it
++	// will be responsible for it's own destruction.
++	static LLFloaterBulkPermission * create();
++
++protected:
++	LLFloaterBulkPermission(const std::string& name, const LLRect& rect,
++						 const char* title, const char* start_string);
++	virtual ~LLFloaterBulkPermission();
++
++	// This is the callback method for the viewer object currently
++	// being worked on.
++	/*virtual*/ void inventoryChanged(LLViewerObject* obj,
++								 InventoryObjectList* inv,
++								 S32 serial_num,
++								 void* queue);
++	
++	// This is called by inventoryChanged
++	void handleInventory(LLViewerObject* viewer_obj,
++								InventoryObjectList* inv);
++
++
++	void updateInventory(LLViewerObject* object,
++								LLViewerInventoryItem* item,
++								U8 key,
++								bool is_new);
++
++
++	static void onCloseBtn(void* user_data);
++	static void onApplyBtn(void* user_data);
++	static void onCommitPermissions(LLUICtrl* ctrl, void* data);
++	static void InvSelection(LLUICtrl* ctrl, void* data);
++	static void onRecurse(LLUICtrl* ctrl, void* data);	
++	static void onParent(LLUICtrl* ctrl, void* data);
++
++	// returns true if this is done
++	BOOL isDone() const;
++
++	//Read the settings and Apply the permissions
++	void doApply();
++
++	// go to the next object. If no objects left, it falls out
++	// silently and waits to be killed by the deleteIfDone() callback.
++	BOOL nextObject();
++	BOOL popNext();
++
++	// Get this instances ID.
++	const LLUUID& getID() const { return mID; } 
++
++	// find an instance by ID. Return NULL if it does not exist.
++	static LLFloaterBulkPermission* findInstance(const LLUUID& id);
++
++	U32 req_perm_mask;
++
++	BOOL processObject;
++	BOOL processScript;
++	BOOL processTexture;
++	BOOL processSound;
++	BOOL processAnimation;
++	BOOL processCallingcard;
++	BOOL processNotecard;
++	BOOL processGesture;
++	BOOL processClothing;
++	BOOL processBodypart;
++	BOOL processLandmark;
++
++	BOOL recurse;
++	BOOL parent;
++
++protected:
++	// UI
++	LLScrollListCtrl* mMessages;
++	LLButton* mCloseBtn;
++
++	// Object Queue
++	LLDynamicArray<LLUUID> mObjectIDs;
++	LLUUID mCurrentObjectID;
++	BOOL mDone;
++
++	LLUUID mID;
++	static LLMap<LLUUID, LLFloaterBulkPermission*> sInstances;
++
++	const char* mStartString;
++
++};
++
++#endif
+diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
+index 9782d4b..a417825 100644
+--- a/indra/newview/llviewermenu.cpp
++++ b/indra/newview/llviewermenu.cpp
+@@ -87,6 +87,7 @@
+ #include "llfloateravatartextures.h"
+ #include "llfloaterbeacons.h"
+ #include "llfloaterbuildoptions.h"
++#include "llfloaterbulkpermission.h"
+ #include "llfloaterbump.h"
+ #include "llfloaterbuy.h"
+ #include "llfloaterbuycontents.h"
+@@ -6015,6 +6016,16 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& noscriptmsg, cons
+ 	}
+ }
+ 
++class LLToolsSetBulkPerms : public view_listener_t
++{
++	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
++	{
++		LLFloaterBulkPermission* queue = NULL;
++		queue = LLFloaterBulkPermission::create();
++		return true;
++	}
++};
++
+ void handle_compile_queue(std::string to_lang)
+ {
+ 	LLFloaterCompileQueue* queue;
+@@ -7502,6 +7513,7 @@ void initialize_menus()
+ 	addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory");
+ 	addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory");
+ 	addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction");
++	addMenu(new LLToolsSetBulkPerms(), "Tools.SetBulkPerms");
+ 
+ 	addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie");
+ 	addMenu(new LLToolsEnableLink(), "Tools.EnableLink");
+diff --git a/indra/newview/skins/default/xui/en-us/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en-us/floater_bulk_perms.xml
+new file mode 100644
+index 0000000..3dd838a
+--- /dev/null
++++ b/indra/newview/skins/default/xui/en-us/floater_bulk_perms.xml
+@@ -0,0 +1,127 @@
++<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
++<floater bottom="-554" can_close="true" can_drag_on_left="false" can_minimize="true"
++     can_resize="false" can_tear_off="false" enabled="true" height="420"
++     left="367" min_height="1000" min_width="460" mouse_opaque="true"
++     name="floaterrecursiveperms" title="Bulk permission settings"
++     width="460">
++
++<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++			     bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top"
++			     font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
++			     mouse_opaque="true" name="applyto" v_pad="0" width="206">Apply to</text>
++
++<check_box bottom="-70" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Scripts" left="10" mouse_opaque="true"
++			     name="scripts" radio_style="false"
++			     tool_tip="Apply bulk permissions to scripts"
++			     width="219"/>
++
++<check_box bottom="-90" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Textures" left="10" mouse_opaque="true"
++			     name="textures" radio_style="false"
++			     tool_tip="Apply bulk permissions to textures"
++			     width="219"/>
++
++<check_box bottom="-110" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Animations" left="10" mouse_opaque="true"
++			     name="animations" radio_style="false"
++			     tool_tip="Apply bulk permissions to animations"
++			     width="219"/>
++
++<check_box bottom="-130" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Sounds" left="10" mouse_opaque="true"
++			     name="sounds" radio_style="false"
++			     tool_tip="Apply bulk permissions to sounds"
++			     width="219"/>
++
++<check_box bottom="-150" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Contained objects" left="10" mouse_opaque="true"
++			     name="objects" radio_style="false"
++			     tool_tip="Apply bulk permissions to objects inside inventory"
++			     width="219"/>
++
++<check_box bottom="-170" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Landmarks" left="10" mouse_opaque="true"
++			     name="landmarks" radio_style="false"
++			     tool_tip="Apply bulk permissions to landmarks"
++			     width="219"/>
++
++<check_box bottom="-190" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Notecards" left="10" mouse_opaque="true"
++			     name="notecards" radio_style="false"
++			     tool_tip="Apply bulk permissions to notecards"
++			     width="219"/>
++
++<check_box bottom="-210" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Gesture" left="10" mouse_opaque="true"
++			     name="gestures" radio_style="false"
++			     tool_tip="Apply bulk permissions to gestures"
++			     width="219"/>
++
++<check_box bottom="-230" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Clothing" left="10" mouse_opaque="true"
++			     name="clothing" radio_style="false"
++			     tool_tip="Apply bulk permissions to clothing"
++			     width="219"/>
++
++<check_box bottom="-250" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Bodypart" left="10" mouse_opaque="true"
++			     name="bodyparts" radio_style="false"
++			     tool_tip="Apply bulk permissions to bodyparts"
++			     width="219"/>
++
++<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++			     bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top"
++			     font="SansSerifSmall" h_pad="0" halign="left" height="10" left="200"
++			     mouse_opaque="true" name="applyto" v_pad="0" width="206">Permissions</text>
++
++
++<check_box bottom="-110" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Copy" left="200" mouse_opaque="true"
++			     name="Copy" radio_style="false"
++			     tool_tip="Next owner can copy"
++			     width="219"/>
++
++<check_box bottom="-130" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Modify" left="200" mouse_opaque="true"
++			     name="Modify" radio_style="false"
++			     tool_tip="Next owner can modify"
++			     width="219"/>
++
++<check_box bottom="-150" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Trans" left="200" mouse_opaque="true"
++			     name="Trans" radio_style="false"
++			     tool_tip="Next owner can transfer"
++			     width="219"/>
++
++<check_box bottom="-230" enabled="true" follows="left|top" font="SansSerifSmall"
++			     height="16" initial_value="false"
++			     label="Modify Parent Prims" left="200" mouse_opaque="true"
++			     name="Parent" radio_style="false"
++			     tool_tip="Modify parent prims not just inventory"
++			     width="219" default="true"/>
++
++<scroll_list background_visible="true" bottom="-410" column_padding="5" draw_border="true"
++	     draw_heading="false" draw_stripes="true" enabled="true"
++	     follows="left|top|right|bottom" height="140" left="10" mouse_opaque="true"
++	     multi_select="false" name="queue output" width="440" />
++
++<button bottom="-70" enabled="true" follows="left|top" font="SansSerif"
++			     halign="center" height="20" label="Apply..."
++			     label_selected="Apply..." left="295" mouse_opaque="true"
++			     name="Apply..." scale_image="true" width="145" />
++
++</floater>
+diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+index 2728962..530dede 100644
+--- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml
++++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+@@ -701,6 +701,11 @@
+ 			<on_click function="Tools.SelectedScriptAction" userdata="stop" />
+ 			<on_enable function="EditableSelected" />
+ 		</menu_item_call>
++		<menu_item_call bottom="-468" enabled="false" height="19" label="Set permissions on selected task inventory"
++		     left="0" mouse_opaque="true" name="Set permissions on selected task inventory" width="250">
++			<on_click function="Tools.SetBulkPerms" userdata="" />
++			<on_enable function="EditableSelected" />
++		</menu_item_call>
+ 	</menu>
+ 	<menu bottom="219" create_jump_keys="true" drop_shadow="true" enabled="true"
+ 	     height="317" label="Help" left="227" mouse_opaque="false" name="Help"
+-- 
+tg: (c8fb40a..) topic/features/jira-backported/VWR-5082_set_bulk_inv_permissions (depends on: upstream)
diff --git a/debian/patches/topic/features/jira-backported/avatar_list.diff b/debian/patches/topic/features/jira-backported/avatar_list.diff
new file mode 100644
index 0000000..1e71ecd
--- /dev/null
+++ b/debian/patches/topic/features/jira-backported/avatar_list.diff
@@ -0,0 +1,5212 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/features/jira-backported/avatar_list
+
+Dale Glass's avatar scanner as published on JIRA and rebased by Carjay
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llaudio/audioengine.h                        |    1 +
+ indra/llmessage/llmessagetemplate.h                |  111 +-
+ indra/llmessage/message.cpp                        |   28 +-
+ indra/llmessage/message.h                          |   18 +-
+ indra/llui/llscrolllistctrl.cpp                    |   41 +
+ indra/llui/llscrolllistctrl.h                      |    2 +
+ indra/newview/CMakeLists.txt                       |    3 +
+ indra/newview/app_settings/settings.xml            |   16 +
+ indra/newview/llagent.cpp                          |  121 +-
+ indra/newview/llagent.h                            |   14 +
+ indra/newview/llappviewer.cpp                      |    4 +
+ indra/newview/llchatbar.cpp                        |   34 +-
+ indra/newview/llfloateravatarlist.cpp              | 2187 ++++++++++++++++++++
+ indra/newview/llfloateravatarlist.h                |  868 ++++++++
+ indra/newview/llfloaterpreference.cpp              |    7 +
+ indra/newview/llfloaterpreference.h                |    2 +
+ indra/newview/llfloaterreporter.cpp                |   13 +-
+ indra/newview/llfloaterreporter.h                  |    2 +-
+ indra/newview/llpaneldatabase.cpp                  |  149 ++
+ indra/newview/llpaneldatabase.h                    |   65 +
+ indra/newview/llstartup.cpp                        |    2 +-
+ indra/newview/lltoolbar.cpp                        |    9 +
+ indra/newview/lltoolbar.h                          |    1 +
+ indra/newview/llviewermenu.cpp                     |   14 +
+ indra/newview/llviewermessage.cpp                  |    3 +
+ indra/newview/llviewerobject.h                     |    3 +-
+ indra/newview/llviewerwindow.cpp                   |    8 +-
+ indra/newview/llwebbrowserctrl.h                   |    2 +
+ indra/newview/pipeline.cpp                         |   42 +
+ indra/newview/skins/default/xui/en-us/alerts.xml   |  136 ++
+ .../default/xui/en-us/floater_avatar_scanner.xml   |  413 ++++
+ .../skins/default/xui/en-us/menu_viewer.xml        |   13 +
+ indra/newview/skins/default/xui/en-us/notify.xml   |    6 +
+ .../xui/en-us/panel_preferences_database.xml       |  166 ++
+ .../skins/default/xui/en-us/panel_toolbar.xml      |    7 +
+ 35 files changed, 4448 insertions(+), 63 deletions(-)
+
+diff --git a/indra/llaudio/audioengine.h b/indra/llaudio/audioengine.h
+index b8153a3..48f1e15 100644
+--- a/indra/llaudio/audioengine.h
++++ b/indra/llaudio/audioengine.h
+@@ -311,6 +311,7 @@ public:
+ 	BOOL setupChannel();
+ 	BOOL play(const LLUUID &audio_id);	// Start the audio source playing
+ 
++	const LLUUID &getOwnerID()		{ return mOwnerID; }
+ 	BOOL hasPendingPreloads() const;	// Has preloads that haven't been done yet
+ 
+ 	friend class LLAudioEngine;
+diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h
+index 445d1a8..20f479b 100644
+--- a/indra/llmessage/llmessagetemplate.h
++++ b/indra/llmessage/llmessagetemplate.h
+@@ -35,7 +35,11 @@
+ #include "lldarray.h"
+ #include "message.h" // TODO: babbage: Remove...
+ #include "llstat.h"
++#include "llmsgvariabletype.h"
+ #include "llstl.h"
++#include <list>
++#include <algorithm>
++#include <functional>
+ 
+ class LLMsgVarData
+ {
+@@ -270,6 +274,30 @@ enum EMsgDeprecation
+ 	MD_DEPRECATED
+ };
+ 
++class LLMessageTemplateHandlerEntry
++{
++public:
++	LLMessageTemplateHandlerEntry(message_handler_func_t handler, void **userdata = NULL) :
++		mHandlerFunc(handler), mUserData(userdata) {}
++
++	void call(LLMessageSystem *msgsystem) const { mHandlerFunc(msgsystem, mUserData); }
++
++	bool operator==(const LLMessageTemplateHandlerEntry&a) { return mHandlerFunc == a.mHandlerFunc; }
++private:
++	// message handler function (this is set by each application)
++	message_handler_func_t mHandlerFunc;
++	void **mUserData;	
++};
++
++class callHandler : public std::unary_function<LLMessageTemplateHandlerEntry, void>
++{
++public:
++	callHandler(LLMessageSystem *msg) : mMsg(msg) {}
++	void operator()(const LLMessageTemplateHandlerEntry& a) const { a.call(mMsg); }
++private:
++	LLMessageSystem *mMsg;
++};
++
+ class LLMessageTemplate
+ {
+ public:
+@@ -291,9 +319,7 @@ public:
+ 		mTotalDecodeTime(0.f),
+ 		mMaxDecodeTimePerMsg(0.f),
+ 		mBanFromTrusted(false),
+-		mBanFromUntrusted(false),
+-		mHandlerFunc(NULL), 
+-		mUserData(NULL)
++		mBanFromUntrusted(false)
+ 	{ 
+ 		mName = LLMessageStringTable::getInstance()->getString(name);
+ 	}
+@@ -361,21 +387,84 @@ public:
+ 		return mDeprecation;
+ 	}
+ 	
+-	void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data)
++	/**
++	 * @brief Adds a handler
++	 * This function adds a new handler to be called when the message arrives.
++	 * Repeated additions of the same handler function will be ignored.
++	 * @note delHandlerFunc() must be called to remove the registration
++	 * @param handler Function to call
++	 * @param user_data User specified data to pass to the function
++	 */
++	void addHandlerFunc(message_handler_func_t handler, void **user_data)	
++	{
++		LLMessageTemplateHandlerEntry h(handler, user_data);
++
++		if ( std::find(mHandlers.begin(), mHandlers.end(), h ) != mHandlers.end() )
++		{
++			return;
++		}
++
++		mHandlers.push_back( h );
++	}
++
++	/**
++	 * @brief Sets a handler
++	 * This function sets a handler to be called when the message arrives.
++	 * Any existing handlers are unregistered.
++	 * @note delHandlerFunc() must be called to remove the registration
++	 * @param handler Function to call
++	 * @param user_data User specified data to pass to the function
++	 */
++	void setHandlerFunc(message_handler_func_t handler, void **user_data)
++	{
++		mHandlers.clear();
++		if( handler )
++		{
++			addHandlerFunc(handler, user_data);
++		}
++		else
++		{
++			llwarns << "code has reset handler for \"" << mName << "\" by setting it to NULL." << llendl;
++		}
++	}
++
++	/**
++	 * @brief Removes a handler
++	 * Removes a handler from the list of handlers.
++	 * Attempts to remove handlers that aren't in the list are silently
++	 * ignored.
++	 * @param handler Function to remove
++	 */
++	void delHandlerFunc(message_handler_func_t handler)
+ 	{
+-		mHandlerFunc = handler_func;
+-		mUserData = user_data;
++		mHandlers.remove( LLMessageTemplateHandlerEntry(handler) );
+ 	}
+ 
+ 	BOOL callHandlerFunc(LLMessageSystem *msgsystem) const
+ 	{
+-		if (mHandlerFunc)
++		if ( mHandlers.empty() )
++		{
++			return FALSE;
++		}
++		/* 
++		 * Be on the safe side and use for_each only when necessary. There is Linden code ("ReplyPayPrice") that
++		 * does not take the multiple reply handlers into account and simply tries to unregister
++		 * by setting the handler function to 0, unfortunately from within the reply handler so in this case
++		 * the for_each iterator inside std_algo.h is invalidated leading to a crash if the memory is reused
++		 * in between.
++		 */
++		else if( mHandlers.size() == 1 )
+ 		{
+             LLPerfBlock msg_cb_time("msg_cb", mName);
+-			mHandlerFunc(msgsystem, mUserData);
++			mHandlers.begin()->call(msgsystem);
++			return TRUE;
++		}
++		else
++		{
++            LLPerfBlock msg_cb_time("msg_cb", mName);
++			std::for_each(mHandlers.begin(), mHandlers.end(), callHandler(msgsystem));
+ 			return TRUE;
+ 		}
+-		return FALSE;
+ 	}
+ 
+ 	bool isUdpBanned() const
+@@ -420,9 +509,7 @@ public:
+ 	bool									mBanFromUntrusted;
+ 
+ private:
+-	// message handler function (this is set by each application)
+-	void									(*mHandlerFunc)(LLMessageSystem *msgsystem, void **user_data);
+-	void									**mUserData;
++	std::list<LLMessageTemplateHandlerEntry> mHandlers;
+ };
+ 
+ #endif // LL_LLMESSAGETEMPLATE_H
+diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
+index 9ca7211..30bf722 100644
+--- a/indra/llmessage/message.cpp
++++ b/indra/llmessage/message.cpp
+@@ -2972,7 +2972,7 @@ void LLMessageSystem::addTemplate(LLMessageTemplate *templatep)
+ }
+ 
+ 
+-void LLMessageSystem::setHandlerFuncFast(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data)
++void LLMessageSystem::setHandlerFuncFast(const char *name, message_handler_func_t handler_func, void **user_data)
+ {
+ 	LLMessageTemplate* msgtemplate = get_ptr_in_map(mMessageTemplates, name);
+ 	if (msgtemplate)
+@@ -2985,6 +2985,32 @@ void LLMessageSystem::setHandlerFuncFast(const char *name, void (*handler_func)(
+ 	}
+ }
+ 
++void LLMessageSystem::addHandlerFuncFast(const char *name, message_handler_func_t handler_func, void **user_data)
++{
++	LLMessageTemplate* msgtemplate = get_ptr_in_map(mMessageTemplates, name);
++	if (msgtemplate)
++	{
++		msgtemplate->addHandlerFunc(handler_func, user_data);
++	}
++	else
++	{
++		llerrs << name << " is not a known message name!" << llendl;
++	}
++}
++
++void LLMessageSystem::delHandlerFuncFast(const char *name, message_handler_func_t handler_func)
++{
++	LLMessageTemplate* msgtemplate = get_ptr_in_map(mMessageTemplates, name);
++	if (msgtemplate)
++	{
++		msgtemplate->delHandlerFunc(handler_func);
++	}
++	else
++	{
++		llerrs << name << " is not a known message name!" << llendl;
++	}
++}
++
+ bool LLMessageSystem::callHandler(const char *name,
+ 		bool trustedSource, LLMessageSystem* msg)
+ {
+diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
+index b72aa9a..eff2d20 100644
+--- a/indra/llmessage/message.h
++++ b/indra/llmessage/message.h
+@@ -179,7 +179,7 @@ enum EMessageException
+ 	MX_WROTE_PAST_BUFFER_SIZE // wrote past buffer size in zero code expand
+ };
+ typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException);
+-
++typedef void (*message_handler_func_t)(LLMessageSystem *msgsystem, void **user_data);
+ 
+ // message data pieces are used to collect the data called for by the message template
+ class LLMsgData;
+@@ -299,12 +299,24 @@ public:
+ 
+ 
+ 	// methods for building, sending, receiving, and handling messages
+-	void	setHandlerFuncFast(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data = NULL);
+-	void	setHandlerFunc(const char *name, void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data = NULL)
++	void	setHandlerFuncFast(const char *name, message_handler_func_t, void **user_data = NULL);
++	void	setHandlerFunc(const char *name, message_handler_func_t handler_func, void **user_data = NULL)
+ 	{
+ 		setHandlerFuncFast(LLMessageStringTable::getInstance()->getString(name), handler_func, user_data);
+ 	}
+ 
++	void	addHandlerFuncFast(const char *name, message_handler_func_t, void **user_data = NULL);
++	void	addHandlerFunc(const char *name, message_handler_func_t handler_func, void **user_data = NULL)
++	{
++		addHandlerFuncFast(LLMessageStringTable::getInstance()->getString(name), handler_func, user_data);
++	}
++
++	void	delHandlerFuncFast(const char *name, message_handler_func_t);
++	void	delHandlerFunc(const char *name, message_handler_func_t handler_func)
++	{
++		delHandlerFuncFast(LLMessageStringTable::getInstance()->getString(name), handler_func);
++	}
++
+ 	// Set a callback function for a message system exception.
+ 	void setExceptionFunc(EMessageException exception, msg_exception_callback func, void* data = NULL);
+ 	// Call the specified exception func, and return TRUE if a
+diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
+index 92bcb88..f64c6ed 100644
+--- a/indra/llui/llscrolllistctrl.cpp
++++ b/indra/llui/llscrolllistctrl.cpp
+@@ -703,6 +703,29 @@ std::vector<LLScrollListItem*> LLScrollListCtrl::getAllSelected() const
+ 	return ret;
+ }
+ 
++/**
++ * Returns the selected IDs
++ * @returns List of selected IDs
++ * @author Dale Glass
++ */
++LLDynamicArray<LLUUID> LLScrollListCtrl::getSelectedIDs()
++{
++	LLUUID selected_id;
++	LLDynamicArray<LLUUID> ret;
++
++	item_list::const_iterator iter;
++	for(iter = mItemList.begin(); iter != mItemList.end(); iter++)
++	{
++		LLScrollListItem* item  = *iter;
++		if (item->getSelected())
++		{
++			ret.push_back(item->getUUID());
++		}
++	}
++	return ret;
++}
++
++
+ S32 LLScrollListCtrl::getFirstSelectedIndex() const
+ {
+ 	S32 CurSelectedIndex = 0;
+@@ -2534,6 +2557,23 @@ void LLScrollListCtrl::onScrollChange( S32 new_pos, LLScrollbar* scrollbar, void
+ }
+ 
+ 
++/**
++ * Re-sorts the list
++ *
++ * This function allows to avoid multiple unnecessary sorts in the case where
++ * multiple elements will be added or removed at once.
++ * @author Dale Glass
++ */
++void LLScrollListCtrl::sort()
++{
++	// sort by column 0, in ascending order
++	std::stable_sort(
++		mItemList.begin(), 
++		mItemList.end(), 
++		SortScrollListItem(mSortColumns));
++}
++
++
+ void LLScrollListCtrl::sortByColumn(const std::string& name, BOOL ascending)
+ {
+ 	std::map<std::string, LLScrollListColumn>::iterator itor = mColumns.find(name);
+@@ -3851,3 +3891,4 @@ BOOL LLColumnHeader::canResize()
+ {
+ 	return getVisible() && (mHasResizableElement || mColumn->mDynamicWidth);
+ }
++
+diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
+index 12b8e2c..e415821 100644
+--- a/indra/llui/llscrolllistctrl.h
++++ b/indra/llui/llscrolllistctrl.h
+@@ -421,6 +421,7 @@ public:
+ 	// Sets an array of column descriptors
+ 	void 	   		setColumnHeadings(LLSD headings);
+ 	void   			sortByColumnIndex(U32 column, BOOL ascending);
++	void            sort();
+ 	
+ 	// LLCtrlListInterface functions
+ 	virtual S32  getItemCount() const;
+@@ -518,6 +519,7 @@ public:
+ 	virtual S32			getFirstSelectedIndex() const;
+ 	std::vector<LLScrollListItem*> getAllSelected() const;
+ 	LLScrollListItem*	getLastSelectedItem() const { return mLastSelected; }
++ 	LLDynamicArray<LLUUID> 	getSelectedIDs();
+ 
+ 	// iterate over all items
+ 	LLScrollListItem*	getFirstData() const;
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..563bee2 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -122,6 +122,7 @@ set(viewer_SOURCE_FILES
+     llfloateranimpreview.cpp
+     llfloaterauction.cpp
+     llfloateravatarinfo.cpp
++    llfloateravatarlist.cpp
+     llfloateravatarpicker.cpp
+     llfloateravatartextures.cpp
+     llfloaterbeacons.cpp
+@@ -244,6 +245,7 @@ set(viewer_SOURCE_FILES
+     llpanelaudioprefs.cpp
+     llpanelaudiovolume.cpp
+     llpanelavatar.cpp
++    llpaneldatabase.cpp
+     llpanelclassified.cpp
+     llpanelcontents.cpp
+     llpaneldebug.cpp
+@@ -638,6 +640,7 @@ set(viewer_HEADER_FILES
+     llpanelaudioprefs.h
+     llpanelaudiovolume.h
+     llpanelavatar.h
++    llpaneldatabase.h
+     llpanelclassified.h
+     llpanelcontents.h
+     llpaneldebug.h
+diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
+index 9dac926..866e125 100644
+--- a/indra/newview/app_settings/settings.xml
++++ b/indra/newview/app_settings/settings.xml
+@@ -2633,6 +2633,22 @@
+         <integer>0</integer>
+       </array>
+     </map>
++    <key>FloaterAvatarListRect</key>
++    <map>
++      <key>Comment</key>
++      <string>Rectangle avatar list window</string>
++      <key>Persist</key>
++      <integer>1</integer>
++      <key>Type</key>
++      <string>Rect</string>
++      <key>Value</key>
++      <array>
++        <integer>0</integer>
++        <integer>400</integer>
++        <integer>200</integer>
++        <integer>0</integer>
++      </array>
++    </map>
+     <key>FloaterAudioVolumeRect</key>
+     <map>
+       <key>Comment</key>
+diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
+index 2237d67..5360999 100644
+--- a/indra/newview/llagent.cpp
++++ b/indra/newview/llagent.cpp
+@@ -67,6 +67,7 @@
+ #include "llfloater.h"
+ #include "llfloateractivespeakers.h"
+ #include "llfloateravatarinfo.h"
++#include "llfloateravatarlist.h"
+ #include "llfloaterbuildoptions.h"
+ #include "llfloatercamera.h"
+ #include "llfloaterchat.h"
+@@ -2747,7 +2748,18 @@ void LLAgent::startTyping()
+ 	{
+ 		sendAnimationRequest(ANIM_AGENT_TYPE, ANIM_REQUEST_START);
+ 	}
+-	gChatBar->sendChatFromViewer("", CHAT_TYPE_START, FALSE);
++	sendChat("", 0, CHAT_TYPE_START, false);
++
++	// Addition for avatar list support.
++	// Makes the fact that this avatar is typing appear in the list
++	if ( NULL != gFloaterAvatarList )
++	{
++		LLAvatarListEntry *ent = gFloaterAvatarList->getAvatarEntry(getID());
++		if ( NULL != ent )
++		{
++			ent->setActivity(ACTIVITY_TYPING);
++		}
++	}
+ }
+ 
+ //-----------------------------------------------------------------------------
+@@ -2759,7 +2771,7 @@ void LLAgent::stopTyping()
+ 	{
+ 		clearRenderState(AGENT_STATE_TYPING);
+ 		sendAnimationRequest(ANIM_AGENT_TYPE, ANIM_REQUEST_STOP);
+-		gChatBar->sendChatFromViewer("", CHAT_TYPE_STOP, FALSE);
++		sendChat("", 0, CHAT_TYPE_STOP, false);
+ 	}
+ }
+ 
+@@ -4585,10 +4597,16 @@ void LLAgent::heardChat(const LLUUID& id)
+ 	mChatTimer.reset();
+ }
+ 
++
++void LLAgent::lookAtLastChat()
++{
++	lookAtObject(mLastChatterID, CAMERA_POSITION_SELF);
++}
++
+ //-----------------------------------------------------------------------------
+ // lookAtLastChat()
+ //-----------------------------------------------------------------------------
+-void LLAgent::lookAtLastChat()
++void LLAgent::lookAtObject(LLUUID object_id, ECameraPosition camera_pos)
+ {
+ 	// Block if camera is animating or not in normal third person camera mode
+ 	if (mCameraAnimating || !cameraThirdPerson())
+@@ -4596,7 +4614,7 @@ void LLAgent::lookAtLastChat()
+ 		return;
+ 	}
+ 
+-	LLViewerObject *chatter = gObjectList.findObject(mLastChatterID);
++	LLViewerObject *chatter = gObjectList.findObject(object_id);
+ 	if (chatter)
+ 	{
+ 		LLVector3 delta_pos;
+@@ -4625,15 +4643,39 @@ void LLAgent::lookAtLastChat()
+ 			new_camera_pos -= delta_pos * 0.4f;
+ 			new_camera_pos += left * 0.3f;
+ 			new_camera_pos += up * 0.2f;
++
++			F32 radius = chatter_av->getVObjRadius();
++			LLVector3d view_dist(radius, radius, 0.0f);
++
+ 			if (chatter_av->mHeadp)
+ 			{
+-				setFocusGlobal(getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), mLastChatterID);
++				setFocusGlobal(getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), object_id);
+ 				mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition());
++
++				switch(camera_pos)
++				{
++					case CAMERA_POSITION_SELF:
++						mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition());
++						break;
++					case CAMERA_POSITION_OBJECT:
++						mCameraFocusOffsetTarget =  view_dist;
++						break;
++				}
+ 			}
+ 			else
+ 			{
+-				setFocusGlobal(chatter->getPositionGlobal(), mLastChatterID);
++				setFocusGlobal(chatter->getPositionGlobal(), object_id);
+ 				mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
++
++				switch(camera_pos)
++				{
++					case CAMERA_POSITION_SELF:
++						mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
++						break;
++					case CAMERA_POSITION_OBJECT:
++						mCameraFocusOffsetTarget = view_dist;
++						break;
++				}
+ 			}
+ 			setFocusOnAvatar(FALSE, TRUE);
+ 		}
+@@ -4655,8 +4697,20 @@ void LLAgent::lookAtLastChat()
+ 			new_camera_pos += left * 0.3f;
+ 			new_camera_pos += up * 0.2f;
+ 
+-			setFocusGlobal(chatter->getPositionGlobal(), mLastChatterID);
+-			mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
++			setFocusGlobal(chatter->getPositionGlobal(), object_id);
++
++			switch(camera_pos)
++			{
++				case CAMERA_POSITION_SELF:
++					mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal();
++					break;
++				case CAMERA_POSITION_OBJECT:
++					F32 radius = chatter->getVObjRadius();
++					LLVector3d view_dist(radius, radius, 0.0f);
++					mCameraFocusOffsetTarget = view_dist;
++					break;
++			}
++
+ 			setFocusOnAvatar(FALSE, TRUE);
+ 		}
+ 	}
+@@ -6012,6 +6066,57 @@ void LLAgent::setTeleportState(ETeleportState state)
+ 	}
+ }
+ 
++void LLAgent::sendChat(const std::string &text, S32 channel, EChatType type, bool animate)
++{
++
++	// Don't animate for chats people can't hear (chat to scripts)
++	if (animate && (channel == 0))
++	{
++		if (type == CHAT_TYPE_WHISPER)
++		{
++			lldebugs << "You whisper " << text << llendl;
++			sendAnimationRequest(ANIM_AGENT_WHISPER, ANIM_REQUEST_START);
++		}
++		else if (type == CHAT_TYPE_NORMAL)
++		{
++			lldebugs << "You say " << text << llendl;
++			sendAnimationRequest(ANIM_AGENT_TALK, ANIM_REQUEST_START);
++		}
++		else if (type == CHAT_TYPE_SHOUT)
++		{
++			lldebugs << "You shout " << text << llendl;
++			sendAnimationRequest(ANIM_AGENT_SHOUT, ANIM_REQUEST_START);
++		}
++		else
++		{
++			llinfos << "send_chat_from_viewer() - invalid volume" << llendl;
++			return;
++		}
++	}
++	else
++	{
++		if (type != CHAT_TYPE_START && type != CHAT_TYPE_STOP)
++		{
++			lldebugs << "Channel chat: " << text << llendl;
++		}
++	}
++
++	LLMessageSystem* msg = gMessageSystem;
++
++	msg->newMessageFast(_PREHASH_ChatFromViewer);
++	msg->nextBlockFast(_PREHASH_AgentData);
++	msg->addUUIDFast(_PREHASH_AgentID, getID());
++	msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
++	msg->nextBlockFast(_PREHASH_ChatData);
++	msg->addStringFast(_PREHASH_Message, text);
++	msg->addU8Fast(_PREHASH_Type, type);
++	msg->addS32("Channel", channel);
++
++	gAgent.sendReliableMessage();
++
++	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT);
++}
++
+ void LLAgent::fidget()
+ {
+ 	if (!getAFK())
+diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
+index 2befeb0..37b797a 100644
+--- a/indra/newview/llagent.h
++++ b/indra/newview/llagent.h
+@@ -36,6 +36,7 @@
+ 
+ #include "indra_constants.h"
+ #include "llmath.h"
++#include "llchat.h"
+ #include "llcontrol.h"
+ #include "llcoordframe.h"
+ #include "llevent.h"
+@@ -80,6 +81,15 @@ typedef enum e_camera_modes
+ 	CAMERA_MODE_FOLLOW
+ } ECameraMode;
+ 
++/**
++ * @brief When looking at an object, where is the camera offset from
++ */
++typedef enum e_camera_position
++{
++	CAMERA_POSITION_SELF, /** Camera positioned at our position */
++	CAMERA_POSITION_OBJECT /** Camera positioned at observed object's position */
++} ECameraPosition;
++
+ typedef enum e_anim_request
+ {
+ 	ANIM_REQUEST_START,
+@@ -206,6 +216,7 @@ public:
+ 
+ 	void			heardChat(const LLUUID& id);
+ 	void			lookAtLastChat();
++	void			lookAtObject(LLUUID avatar_id, ECameraPosition camera_pos);
+ 	F32			getTypingTime() { return mTypingTimer.getElapsedTimeF32(); }
+ 
+ 	void			setAFK();
+@@ -479,6 +490,9 @@ public:
+ 
+ 	const std::string getTeleportSourceSLURL() const { return mTeleportSourceSLURL; }
+ 
++	void sendChat(const std::string &text, S32 channel = 0, EChatType type = CHAT_TYPE_NORMAL, bool animate = false);
++	void sendChat(const std::wstring &text, S32 channel = 0, EChatType type = CHAT_TYPE_NORMAL, bool animate = false)
++		{ sendChat(wstring_to_utf8str(text), channel, type, animate); }
+ 
+ 	// Setting the ability for this avatar to proxy for another avatar.
+ 	//static void processAddModifyAbility(LLMessageSystem* msg, void**);
+diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
+index 49991b4..6d8c85a 100644
+--- a/indra/newview/llappviewer.cpp
++++ b/indra/newview/llappviewer.cpp
+@@ -33,6 +33,7 @@
+ #include "llviewerprecompiledheaders.h"
+ #include "llappviewer.h"
+ #include "llprimitive.h"
++#include "llfloateravatarlist.h"
+ 
+ #include "llversionviewer.h"
+ #include "llfeaturemanager.h"
+@@ -3139,6 +3140,9 @@ void LLAppViewer::idle()
+ 		}
+ 		gFrameStats.addFrameData();
+ 	}
++
++	// Update avatar list
++	gFloaterAvatarList->updateAvatarList();
+ 	
+ 	if (!gDisconnected)
+ 	{
+diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
+index 2d9d356..f6aefdf 100644
+--- a/indra/newview/llchatbar.cpp
++++ b/indra/newview/llchatbar.cpp
+@@ -585,39 +585,7 @@ void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL
+ 		utf8_text = utf8str_truncate(utf8_text, MAX_STRING - 1);
+ 	}
+ 
+-	// Don't animate for chats people can't hear (chat to scripts)
+-	if (animate && (channel == 0))
+-	{
+-		if (type == CHAT_TYPE_WHISPER)
+-		{
+-			lldebugs << "You whisper " << utf8_text << llendl;
+-			gAgent.sendAnimationRequest(ANIM_AGENT_WHISPER, ANIM_REQUEST_START);
+-		}
+-		else if (type == CHAT_TYPE_NORMAL)
+-		{
+-			lldebugs << "You say " << utf8_text << llendl;
+-			gAgent.sendAnimationRequest(ANIM_AGENT_TALK, ANIM_REQUEST_START);
+-		}
+-		else if (type == CHAT_TYPE_SHOUT)
+-		{
+-			lldebugs << "You shout " << utf8_text << llendl;
+-			gAgent.sendAnimationRequest(ANIM_AGENT_SHOUT, ANIM_REQUEST_START);
+-		}
+-		else
+-		{
+-			llinfos << "send_chat_from_viewer() - invalid volume" << llendl;
+-			return;
+-		}
+-	}
+-	else
+-	{
+-		if (type != CHAT_TYPE_START && type != CHAT_TYPE_STOP)
+-		{
+-			lldebugs << "Channel chat: " << utf8_text << llendl;
+-		}
+-	}
+-
+-	send_chat_from_viewer(utf8_out_text, type, channel);
++	gAgent.sendChat(utf8_out_text, channel, type, animate);
+ }
+ 
+ void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel)
+diff --git a/indra/newview/llfloateravatarlist.cpp b/indra/newview/llfloateravatarlist.cpp
+new file mode 100644
+index 0000000..e1656eb
+--- /dev/null
++++ b/indra/newview/llfloateravatarlist.cpp
+@@ -0,0 +1,2187 @@
++/** 
++ * @file llfloatermute.cpp
++ * @brief Container for mute list
++ *
++ * @author Dale Glass <dale at daleglass.net>, (C) 2007
++ */
++
++#include "llviewerprecompiledheaders.h" // must be first include
++
++#include "llavatarconstants.h"
++#include "llfloateravatarlist.h"
++
++#include "lluictrlfactory.h" // builds floaters from XML
++#include "llviewerwindow.h"
++#include "llscrolllistctrl.h"
++
++#include "llvoavatar.h"
++#include "llimview.h"
++#include "llfloateravatarinfo.h"
++#include "llregionflags.h"
++#include "llfloaterreporter.h"
++#include "llagent.h"
++#include "llviewerregion.h"
++#include "lltracker.h"
++#include "llviewercontrol.h"
++#include "llviewerstats.h"
++#include "llerror.h"
++#include "llchat.h"
++#include "llviewermessage.h"
++#include "llweb.h"
++#include "llviewerobjectlist.h"
++#include "llmutelist.h"
++#include "llviewerimagelist.h"
++#include "llworld.h"
++#include "llcachename.h"
++#include "llviewercamera.h"
++
++#include <time.h>
++#include <string.h>
++
++#include <map>
++
++
++// Timeouts
++/**
++ * @brief How long to keep showing an activity, in seconds
++ */
++const F32 ACTIVITY_TIMEOUT = 1.0f;
++
++
++/**
++ * @brief How many seconds to wait between data requests
++ *
++ * This is intended to avoid flooding the server with requests
++ */
++const F32 MIN_REQUEST_INTERVAL   = 1.0f;
++
++/**
++ * @brief How long to wait for a request to arrive during the first try in seconds
++ */
++const F32 FIRST_REQUEST_TIMEOUT  = 16.0f;
++
++/**
++ * @brief Delay is doubled on each attempt. This is as high as it'll go
++ */
++const F32 MAX_REQUEST_TIMEOUT    = 2048.0f;
++ 
++/**
++ * How long to wait for a request to arrive before assuming failure
++ * and showing the failure icon in the list. This is just for the user's
++ * information, if a reply arrives after this interval we'll accept it anyway.
++ */
++const F32 REQUEST_FAIL_TIMEOUT   = 15.0f;
++
++/**
++ * How long to keep people who are gone in the list. After this time is reached,
++ * they're not shown in the list anymore, but still kept in memory until
++ * CLEANUP_TIMEOUT is reached.
++ */
++const F32 DEAD_KEEP_TIME = 10.0f;
++
++/**
++ * @brief How long to keep entries around before removing them.
++ *
++ * @note Longer term, data like birth and payment info should be cached on disk.
++ */
++const F32 CLEANUP_TIMEOUT = 3600.0f;
++
++
++/**
++ * @brief TrustNet channel
++ * This is fixed in the adapter script.
++ */
++const S32 TRUSTNET_CHANNEL = 0x44470002;
++
++
++extern U32 gFrameCount;
++
++
++LLAvListTrustNetScore::LLAvListTrustNetScore(std::string type, F32 score)
++{
++	Score = score;
++	Type = type;	
++}
++
++LLAvatarInfo::LLAvatarInfo()
++{
++}
++
++LLAvatarInfo::LLAvatarInfo(PAYMENT_TYPE payment, ACCOUNT_TYPE account, struct tm birth)
++{
++	Payment = payment;
++	Account = account;
++	BirthDate = birth;
++}
++
++S32 LLAvatarInfo::getAge()
++{
++	time_t birth = mktime(&BirthDate);
++	time_t now = time(NULL);
++	return(S32)(difftime(now,birth) / (60*60*24));
++}
++
++void LLAvatarListEntry::setPosition(LLVector3d position)
++{
++	if ( mPosition != position )
++	{
++		setActivity(ACTIVITY_MOVING);
++	}
++
++	mPosition = position;
++	mFrame = gFrameCount;
++	mUpdateTimer.start();
++}
++
++LLVector3d LLAvatarListEntry::getPosition()
++{
++	return mPosition;
++}
++
++U32 LLAvatarListEntry::getEntryAgeFrames()
++{
++	return (gFrameCount - mFrame);
++}
++
++F32 LLAvatarListEntry::getEntryEnteredSeconds()
++{
++	return mEnteredTimer.getElapsedTimeF32();
++}
++
++F32 LLAvatarListEntry::getEntryAgeSeconds()
++{
++	return mUpdateTimer.getElapsedTimeF32();
++}
++
++void LLAvatarListEntry::setName(std::string name)
++{
++	if ( name.empty() || (name.compare(" ") == 0))
++	{
++		llwarns << "Trying to set empty name" << llendl;
++	}
++	mName = name;
++}
++
++std::string LLAvatarListEntry::getName()
++{
++	return mName;
++}
++
++LLUUID LLAvatarListEntry::getID()
++{
++	return mID;
++}
++
++void LLAvatarListEntry::setID(LLUUID id)
++{
++	if ( id.isNull() )
++	{
++		llwarns << "Trying to set null id" << llendl;
++	}
++	mID = id;
++}
++
++BOOL LLAvatarListEntry::getIsLinden()
++{
++	// Are there any employees that are not a Linden?
++	// I suppose this is a bit redundant.
++	return ( mIsLinden || ( mAvatarInfo.getValue().Account == ACCOUNT_EMPLOYEE ) );
++}
++
++void LLAvatarListEntry::setAccountCustomTitle(std::string &title)
++{
++	mAccountTitle = title;
++	mAvatarInfo.getValue().Account = ACCOUNT_CUSTOM;
++}
++
++std::string LLAvatarListEntry::getAccountCustomTitle()
++{
++	return mAccountTitle;
++}
++
++
++
++void LLAvatarListEntry::setActivity(ACTIVITY_TYPE activity)
++{
++	if ( activity >= mActivityType || mActivityTimer.getElapsedTimeF32() > ACTIVITY_TIMEOUT )
++	{
++		mActivityType = activity;
++		mActivityTimer.start();
++	}
++}
++
++ACTIVITY_TYPE LLAvatarListEntry::getActivity()
++{
++	if ( mActivityTimer.getElapsedTimeF32() > ACTIVITY_TIMEOUT )
++	{
++		mActivityType = ACTIVITY_NONE;
++	}
++	
++	return mActivityType;
++}
++
++void LLAvatarListEntry::toggleMark()
++{
++	mMarked = !mMarked;
++}
++
++BOOL LLAvatarListEntry::isMarked()
++{
++	return mMarked;
++}
++
++BOOL LLAvatarListEntry::isDead()
++{
++	return getEntryAgeSeconds() > DEAD_KEEP_TIME;
++}
++
++// Avatar list is global
++LLFloaterAvatarList* gFloaterAvatarList = NULL;
++
++
++
++
++LLFloaterAvatarList::LLFloaterAvatarList() :  LLFloater("avatar list")
++{
++
++	// Default values
++	mTracking = FALSE;
++	mTrackByLocation = FALSE;
++	mARLastFrame = 0;
++
++	// Create interface from XML
++	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_scanner.xml");
++
++	// Floater starts hidden	
++	setVisible(FALSE);
++
++	// Set callbacks
++	//childSetAction("refresh_btn", onClickRefresh, this);
++	childSetAction("profile_btn", onClickProfile, this);
++	childSetAction("im_btn", onClickIM, this);
++	childSetAction("track_btn", onClickTrack, this);
++	childSetAction("mark_btn", onClickMark, this);
++
++	childSetAction("gowarn_btn", onClickGohomerWarn, this);
++	childSetAction("goeject_btn", onClickGohomerEject, this);
++	childSetAction("goaway_btn", onClickGohomerSendAway, this);
++	childSetAction("gohome_btn", onClickGohomerSendHome, this);
++	childSetAction("gohomeoff_btn", onClickGohomerOff, this);
++	childSetAction("gokey_btn", onClickGohomerSendHomeByKey, this);
++
++	childSetAction("prev_in_list_btn", onClickPrevInList, this);
++	childSetAction("next_in_list_btn", onClickNextInList, this);
++	childSetAction("prev_marked_btn", onClickPrevMarked, this);
++	childSetAction("next_marked_btn", onClickNextMarked, this);
++	
++	childSetAction("get_key_btn", onClickGetKey, this);
++
++	childSetAction("tn_rate_btn", onClickTrustNetRate, this);
++	childSetAction("tn_explain_btn", onClickTrustNetExplain, this);
++	childSetAction("tn_website_btn", onClickTrustNetWebsite, this);
++	childSetAction("tn_password_btn", onClickTrustNetGetPassword, this);
++	childSetAction("tn_renew_btn", onClickTrustNetRenew, this);
++
++	childSetAction("freeze_btn", onClickFreeze, this);
++	childSetAction("eject_btn", onClickEject, this);
++//	childSetAction("ban_btn", onClickBan, this);
++//	childSetAction("unban_btn", onClickUnban, this);
++	childSetAction("mute_btn", onClickMute, this);
++//	childSetAction("unmute_btn", onClickUnmute, this);
++	childSetAction("ar_btn", onClickAR, this);
++	childSetAction("teleport_btn", onClickTeleport, this);
++	childSetAction("estate_eject_btn", onClickEjectFromEstate, this);
++
++	setDefaultBtn("refresh_btn");
++
++	// Get a pointer to the scroll list from the interface
++	mAvatarList = getChild<LLScrollListCtrl>("avatar_list");
++
++	mAvatarList->setCallbackUserData(this);
++	mAvatarList->setDoubleClickCallback(onDoubleClick);
++	mAvatarList->sortByColumn("distance", TRUE);
++	mDataRequestTimer.start();
++	refreshAvatarList();
++
++	LLMessageSystem *msg = gMessageSystem;
++	msg->addHandlerFunc("AvatarPropertiesReply", processAvatarPropertiesReply);
++}
++
++LLFloaterAvatarList::~LLFloaterAvatarList()
++{
++	LLMessageSystem *msg = gMessageSystem;
++	if ( msg )
++	{
++		msg->delHandlerFunc("AvatarPropertiesReply", processAvatarPropertiesReply);
++	}
++	std::map< LLUUID, LLPointer< LLHUDObject > >::iterator it = mHudObjectMap.begin();
++	for ( ; it != mHudObjectMap.end(); ++it )
++	{ // clean up list
++		it->second->markDead();
++	}
++
++}
++
++
++void LLFloaterAvatarList::show()
++{
++	// Make sure we make a noise.
++	open();
++}
++
++//static
++void LLFloaterAvatarList::toggle(void*) {
++	if (!gFloaterAvatarList) {
++		llinfos << "No avatar list!" << llendl;
++		return;
++	}
++
++	if (gFloaterAvatarList->getVisible())
++	{
++		gFloaterAvatarList->close();
++	}
++	else
++	{
++		gFloaterAvatarList->show();
++	}
++}
++
++//static
++BOOL LLFloaterAvatarList::visible(void*)
++{
++	return (gFloaterAvatarList && gFloaterAvatarList->getVisible());
++}
++
++void LLFloaterAvatarList::updateFromCoarse()
++{
++	/*
++	 * Walk through remaining list of coarse update avatars in all known regions
++	 * this will not give us an accurate height since it's mod 2048 and least possible
++	 * increment is 4 meter. Coarse Update information is accurate instantly while
++	 * the object list is filled one by one.
++	 *
++	 * This also works for neighbour sims which makes it really handy :)
++	 */
++	
++	// first wipe the list clean from coarse entries
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++	for(iter = mAvatars.begin(); iter != mAvatars.end();)
++	{
++		LLAvatarListEntry entry = iter->second;
++		if ( entry.getIsCoarse() )
++		{
++			mAvatars.erase( iter++ );
++		}
++		else
++		{
++			++iter;
++		}
++	}
++
++	LLWorld::region_list_t regions = LLWorld::getInstance()->getRegionList();
++	LLWorld::region_list_t::const_iterator it = regions.begin();
++	
++	for ( ; it != regions.end(); ++it )
++	{
++		LLViewerRegion const *region = *it;
++		if ( !region )
++		{
++			llwarns << "null region while parsing region list" << llendl;
++			continue;
++		}
++
++		for (int idx = 0; idx < region->mMapAvatarIDs.count(); ++idx)
++		{
++			LLUUID avid = region->mMapAvatarIDs.get( idx );
++
++			if ( avid.isNull() )
++			{
++				continue;
++			}
++
++			// we need to accomodate for avatars that are stuck in the
++			// object list while still accurately received in the coarse
++			// location list
++			U32 modpos = region->mMapAvatars.get( idx );
++			LLVector3 localpos;
++			localpos[0] = (modpos >> 16) & 0xff;
++			localpos[1] = (modpos >>  8) & 0xff;
++			// scale z-position
++			localpos[2] = (modpos        & 0xff) << 2;
++			LLVector3d position = region->getPosGlobalFromRegion( localpos );
++			
++			if ( ( mAvatars.count( avid ) > 0 ) && ( !mAvatars[ avid ].isDead() ) )
++			{
++				// Avatar already in list but could be one of these "perpetual motion" avatars
++				// which would overlay the real coordinates, so we check for the distance disregarding
++				// the z axis
++				LLVector3d coarsepos = position;
++				coarsepos[2]     = 0.0;
++				LLVector3d vopos = mAvatars[ avid ].mPosition;
++				vopos[2]         = 0.0;
++				LLVector3d dist  = coarsepos - vopos;
++				if ( dist.magVecSquared() > ( 50.0 * 50.0 ) )
++				{
++					// Avatar already in list, but position info is
++					// out of sync so use coarse info, we can safely overwrite
++					// the info here since we are called after the VOlist has
++					// already been parsed. The only issue is that this will now
++					// show the avatar as perpetually moving
++					mAvatars[ avid ].setPosition( coarsepos );
++				}
++				// Avatar already in list, active and
++				// close enough to coarse info, so skip
++				continue;
++			}
++
++			// Avatar not there yet, add it
++			std::string name;
++			BOOL isLinden = FALSE;
++			if ( !gCacheName->getFullName( avid, name ) )
++			{
++				continue; // wait for proper name
++			}
++			else
++			{
++				std::string first, last;
++				gCacheName->getName( avid, first, last );
++				if ( last == "Linden" )
++				{
++					isLinden = TRUE;
++				}
++			}
++
++			std::string regionname;
++			if ( gAgent.getRegion() && ( region->getName() != gAgent.getRegion()->getName() ) )
++			{
++				regionname = region->getName();
++			}
++
++			// add as coarse info
++			LLAvatarListEntry entry(avid, name, position, isLinden, TRUE, regionname);
++			mAvatars[avid] = entry;
++
++			//llinfos << "avatar list refresh from coarse: adding " << name << llendl;
++
++		}
++	}
++}
++
++
++void LLFloaterAvatarList::purgeAvatarHUDMap()
++{
++	std::map< LLUUID, LLPointer< LLHUDObject > >::iterator huditer = mHudObjectMap.begin();
++	while ( huditer != mHudObjectMap.end() )
++	{
++		if ( mAvatars.count( huditer->first ) == 0 )
++		{
++			huditer->second->markDead();
++			mHudObjectMap.erase( huditer++ );
++		}
++		else
++		{
++			++huditer;
++		}
++	}
++}
++
++
++void LLFloaterAvatarList::updateAvatarList()
++{
++//	LLVOAvatar *avatarp;
++
++	//llinfos << "avatar list refresh: updating map" << llendl;
++
++	// Check whether updates are enabled
++	LLCheckboxCtrl* check;
++	check = getChild<LLCheckBoxCtrl>("update_enabled_cb");
++
++	if ( !check->getValue() )
++	{
++		return;
++	}
++
++	
++	/*
++	 * Iterate over all the avatars known at the time
++	 * NOTE: Is this the right way to do that? It does appear that LLVOAvatar::isInstances contains
++	 * the list of avatars known to the client. This seems to do the task of tracking avatars without
++	 * any additional requests.
++	 *
++	 * BUG: It looks like avatars sometimes get stuck in this list, and keep perpetually
++	 * moving in the same direction. My current guess is that somewhere else the client
++	 * doesn't notice an avatar disappeared, and keeps updating its position. This should
++	 * be solved at the source of the problem.
++	 */
++	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
++		iter != LLCharacter::sInstances.end(); ++iter)
++	{
++		LLVOAvatar* avatarp = (LLVOAvatar*) *iter;
++
++		// Skip if avatar is dead(what's that?)
++		// or if the avatar is ourselves.
++		if (avatarp->isDead() || avatarp->isSelf())
++		{
++			continue;
++		}
++
++		// Get avatar data
++		LLVector3d position = gAgent.getPosGlobalFromAgent(avatarp->getCharacterPosition());
++		LLUUID avid = avatarp->getID();
++		std::string name = avatarp->getFullname();
++
++		// Apparently, sometimes the name comes out empty, with a " " name. This is because
++		// getFullname concatenates first and last name with a " " in the middle.
++		// This code will avoid adding a nameless entry to the list until it acquires a name.
++		if (name.empty() || (name.compare(" ") == 0))
++		{
++			llinfos << "Name empty for avatar " << avid << llendl;
++			continue;
++		}
++
++		if (avid.isNull())
++		{
++			llinfos << "Key empty for avatar " << name << llendl;
++			continue;
++		}
++
++		if ( ( mAvatars.count( avid ) > 0 ) && !mAvatars[avid].getIsCoarse() )
++		{
++			// Avatar already in list, update position
++			mAvatars[avid].setPosition(position);
++		}
++		else
++		{
++			// Avatar not there yet or only from coarse list, add it properly
++			BOOL isLinden = ( std::string( avatarp->getNVPair("LastName")->getString() ) == "Linden" );
++
++			LLAvatarListEntry entry(avid, name, position, isLinden);
++			mAvatars[avid] = entry;
++
++			sendAvatarPropertiesRequest(avid);
++			llinfos << "avatar list refresh: adding " << name << llendl;
++
++		}
++
++	}
++
++	updateFromCoarse();
++
++//	llinfos << "avatar list refresh: done" << llendl;
++
++	expireAvatarList();
++	refreshAvatarList();
++	
++	purgeAvatarHUDMap();
++	
++	checkTrackingStatus();
++	processARQueue();
++}
++
++void LLFloaterAvatarList::processARQueue()
++{
++	if ( mARQueue.empty() ) return;
++
++	LLUUID avatar_id = mARQueue.front();
++
++	if ( 0 == mARLastFrame )
++	{
++		// Start of the process: Move the camera to the avatar. This happens gradually,
++		// so we'll give it a few frames
++		gAgent.lookAtObject(avatar_id, CAMERA_POSITION_OBJECT);
++		mARLastFrame = gFrameCount;
++		return;
++	}
++
++	if ( gFrameCount - mARLastFrame >= 10 )
++	{
++		// Camera should be in position, show AR screen now
++		LLFloaterReporter *report = LLFloaterReporter::showFromObject(avatar_id, false);
++		report->setMinimized(TRUE);
++
++		mARReporterQueue.push(report);
++
++		mARQueue.pop();
++		mARLastFrame = 0;
++
++		if ( mARQueue.empty() )
++		{
++			// Now that all reports are taken, open them.
++
++			while( !mARReporterQueue.empty() )
++			{
++				LLFloaterReporter *r = mARReporterQueue.front();
++				mARReporterQueue.pop();
++
++				r->open();
++				r->setMinimized(FALSE);
++			}
++		}
++	}
++}
++
++void LLFloaterAvatarList::expireAvatarList()
++{
++//	llinfos << "avatar list: expiring" << llendl;
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++	std::queue<LLUUID> delete_queue;
++
++	for(iter = mAvatars.begin(); iter != mAvatars.end(); iter++)
++	{
++		LLAvatarListEntry *ent = &iter->second;
++		
++		if ( ent->getEntryAgeFrames() >= 2 )
++		{
++			ent->setActivity(ACTIVITY_DEAD);
++		}
++
++
++		if ( ent->getEntryAgeSeconds() > CLEANUP_TIMEOUT )
++		{
++			llinfos << "avatar list: expiring avatar " << ent->getName() << llendl;
++			LLUUID av_id = ent->getID();
++			delete_queue.push(av_id);
++		}
++	}
++
++	while(!delete_queue.empty())
++	{
++		mAvatars.erase(delete_queue.front());
++		if ( mHudObjectMap.count(delete_queue.front()) )
++		{
++			mHudObjectMap[delete_queue.front()]->markDead();
++			mHudObjectMap.erase(delete_queue.front());
++		}
++		delete_queue.pop();
++	}
++}
++
++/**
++ * Redraws the avatar list
++ * Only does anything if the avatar list is visible.
++ * @author Dale Glass
++ */
++void LLFloaterAvatarList::refreshAvatarList() 
++{
++
++
++
++	// Don't update list when interface is hidden
++	if (!LLFloaterAvatarList::visible(NULL))
++	{
++		return;
++	}
++
++
++	LLCheckboxCtrl* fetch_data;
++	fetch_data = getChild<LLCheckBoxCtrl>("fetch_avdata_enabled_cb");
++
++	//BOOL db_enabled = gSavedSettings.getBOOL("DBEnabled");
++	//std::string db_avatar = gSavedPerAccountSettings.getString("DBAvatarName");
++	//if ( db_avatar.empty() )
++	//{
++	//	db_enabled = FALSE;
++	//}
++
++
++
++	// We rebuild the list fully each time it's refreshed
++	
++	// The assumption is that it's faster to refill it and sort than
++	// to rebuild the whole list.
++	LLDynamicArray<LLUUID> selected = mAvatarList->getSelectedIDs();
++	S32 scrollpos = mAvatarList->getScrollPos();
++
++	mAvatarList->deleteAllItems();
++
++	LLVector3d mypos = gAgent.getPositionGlobal();
++
++	unsigned int counter = 0;
++
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++	for(iter = mAvatars.begin(); iter != mAvatars.end(); iter++)
++	{
++		LLSD element;
++		LLUUID av_id;
++
++		
++		LLAvatarListEntry *ent = &iter->second;
++
++		// Skip if avatar hasn't been around
++		if ( ent->isDead() )
++		{
++			continue;
++		}
++
++		av_id = ent->getID();
++
++		// Get avatar name, position
++		LLAvatarInfo avinfo = ent->mAvatarInfo.getValue();
++		//LLAvListTrustNetScore avscore = ent->mTrustNetScore.getValue();
++
++		DATA_STATUS avinfo_status = ent->mAvatarInfo.getStatus();
++		//DATA_STATUS avscore_status = ent->mTrustNetScore.getStatus();
++
++		LLVector3d position = ent->getPosition();
++		LLVector3d delta = position - mypos;
++		F32 distance = (F32)delta.magVec();
++
++		std::string icon = "";
++
++		// HACK: Workaround for an apparent bug:
++		// sometimes avatar entries get stuck, and are registered
++		// by the client as perpetually moving in the same direction.
++		// this makes sure they get removed from the visible list eventually.
++		// for the coarse list this is not necessary since it is always accurate
++		if ( distance > 1024 && !ent->getIsCoarse() )
++		{
++			continue;
++		}
++
++		if ( av_id.isNull() )
++		{
++			llwarns << "Avatar with null key somehow got into the list!" << llendl;
++			continue;
++		}
++
++		counter++;
++
++		element["id"] = av_id;
++
++		element["columns"][LIST_AVATAR_ICON]["column"] = "avatar_icon";
++		element["columns"][LIST_AVATAR_ICON]["type"] = "text";
++		if ( !ent->isMarked() )
++		{ // show counter if not marked
++			element["columns"][LIST_AVATAR_ICON]["value"] = llformat("%d", counter);
++		}
++		else
++		{
++			element["columns"][LIST_AVATAR_ICON]["type"] = "icon";
++			const LLUUID flag_blue("e39cbfe7-c4e7-3bad-5e5f-958082d55046");
++			element["columns"][LIST_AVATAR_ICON]["value"] = flag_blue.asString();
++		}
++
++
++		if ( ent->getIsLinden() )
++		{
++			element["columns"][LIST_AVATAR_NAME]["font-style"] = "BOLD";
++		}
++
++		if ( ent->getIsCoarse() )
++		{
++			element["columns"][LIST_AVATAR_NAME]["color"] = LLColor4::grey4.getValue();
++		}
++
++		if ( ent->isFocused() )
++		{
++			element["columns"][LIST_AVATAR_NAME]["color"] = LLColor4::cyan.getValue();
++		}
++
++		//element["columns"][LIST_AVATAR_NAME]["font-color"] = getAvatarColor(ent, distance).getValue();
++		element["columns"][LIST_AVATAR_NAME]["column"] = "avatar_name";
++		element["columns"][LIST_AVATAR_NAME]["type"] = "text";
++		std::string agentname = ent->getName();
++		if ( !ent->getIsSameRegion() )
++		{
++			agentname += " (" + ent->getRegionName() + ")";
++		}
++		element["columns"][LIST_AVATAR_NAME]["value"] = agentname.c_str();
++
++		char temp[32];
++		snprintf(temp, sizeof(temp), "%.2f", distance);
++
++		element["columns"][LIST_DISTANCE]["column"] = "distance";
++		element["columns"][LIST_DISTANCE]["type"] = "text";
++		element["columns"][LIST_DISTANCE]["value"] = temp;
++		element["columns"][LIST_DISTANCE]["color"] = getAvatarColor(ent, distance, CT_DISTANCE).getValue();
++
++		
++		if ( avinfo_status == DATA_RETRIEVED )
++		{
++			element["columns"][LIST_AGE]["column"] = "age";
++			element["columns"][LIST_AGE]["type"] = "text";
++			element["columns"][LIST_AGE]["value"] = avinfo.getAge();
++			element["columns"][LIST_AGE]["color"] = getAvatarColor(ent, distance, CT_AGE).getValue();
++		}
++
++		const LLUUID info_error("bbda234c-c76e-8617-0a32-46cc15c5ec42");
++		const LLUUID info_fetching("1468fae4-2f47-6e75-d39f-3ccbd443d31c");
++		const LLUUID info_unknown("0f2d532a-1fc8-01bb-eed3-ef60e7943d1e");
++		const LLUUID payment_info_charter("07bef5d9-31b2-4cc5-999e-c2cd8b5d3a69");
++		const LLUUID payment_info_filled("9d61c4d5-e8f6-78ec-a64f-490e3a4c03d5");
++		const LLUUID payment_info_used("49ac7ef9-caaa-750a-6ec1-51358f0a1672");
++
++		/*
++		element["columns"][LIST_SCORE]["column"] = "score";
++		element["columns"][LIST_SCORE]["type"] = "text";
++
++		icon = "";
++		switch(avscore_status)
++		{
++			case DATA_UNKNOWN:
++				icon = info_unknown.asString();
++				break;
++			case DATA_REQUESTING:
++				icon = info_fetching.asString();
++				break;
++			case DATA_ERROR:
++				icon =  info_error.asString();
++			case DATA_RETRIEVED:
++				element["columns"][LIST_SCORE]["value"] = avscore.Score;
++				element["columns"][LIST_SCORE]["color"] = getAvatarColor(ent, distance, CT_SCORE).getValue();
++				break;
++		}
++		
++		if (!icon.empty() )
++		{	
++			element["columns"][LIST_SCORE].erase("color");
++			element["columns"][LIST_SCORE]["type"] = "icon";
++			element["columns"][LIST_SCORE]["value"] = icon;
++		}*/
++	
++
++		// Get an icon for the payment data
++		// These should be replaced with something proper instead of reusing whatever
++		// LL-provided images happened to fit
++		icon = "";
++
++		switch(avinfo_status)
++		{
++			case DATA_UNKNOWN:
++				icon = info_unknown.asString();
++				break;
++			case DATA_REQUESTING:
++				icon = info_fetching.asString();
++				break;
++			case DATA_ERROR:
++				icon = info_error.asString();
++				break;
++			case DATA_RETRIEVED:
++				switch(avinfo.Payment)
++				{
++					case PAYMENT_NONE:
++						break;
++					case PAYMENT_ON_FILE:
++						icon =  payment_info_filled.asString();
++						break;
++					case PAYMENT_USED:
++						icon =  payment_info_used.asString();
++						break;
++					case PAYMENT_LINDEN:
++						// confusingly named icon, maybe use something else
++						icon =  "icon_top_pick.tga";
++						break;
++				}
++				break;
++		}
++
++		element["columns"][LIST_PAYMENT]["column"] = "payment_data";
++		element["columns"][LIST_PAYMENT]["type"] = "text";
++
++		// TODO: Add icon for "unknown" status
++		//if ( PAYMENT_NONE != avinfo.Payment && DATA_UNKNOWN != avinfo_status )
++		if ( !icon.empty() )
++		{
++			element["columns"][LIST_PAYMENT].erase("color");
++			element["columns"][LIST_PAYMENT]["type"] = "icon";
++			element["columns"][LIST_PAYMENT]["value"] =  icon;
++			//llinfos << "Payment icon: " << payment_icon << llendl;
++		}
++
++		const LLUUID avatar_gone("db4592d5-c8a5-9336-019c-fcbd282d5f33");
++		const LLUUID avatar_new("33d4b23e-a29c-ac03-f7f6-c2fa197b13fe");
++		const LLUUID avatar_typing("6f083c3c-1e88-d184-6add-95402b3e108f");
++		/*<avatar_sound.tga value = "439836e2-29f5-c12f-71d4-aa59283296e1"/>
++		<flag_blue.tga value="e39cbfe7-c4e7-3bad-5e5f-958082d55046"/>
++		<flag_green.tga value="78952758-1bef-f968-d382-b39094f85aa1"/>
++		<flag_orange.tga value="c72ca7d9-42cd-02f1-ce32-ca1ea5d1c25d"/>
++		<flag_pink.tga value="a3419a89-b8d9-293c-693e-12982e574304"/>
++		<flag_purple.tga value="7982fbf8-457a-77ce-61e6-b3c7d9500d2f"/>
++		<flag_red.tga value="11ba32bf-44fe-666e-073b-00768785b4d0"/>
++		<flag_yellow.tga value="98a5a29e-e933-eeed-bdd9-4d461f557d34"/>*/
++		
++		ACTIVITY_TYPE activity = ent->getActivity();
++		icon = "";
++		switch( activity )
++		{
++			case ACTIVITY_NONE:
++				break;
++			case ACTIVITY_MOVING:
++				icon = "inv_item_animation.tga";
++				break;
++			case ACTIVITY_GESTURING:
++				icon = "inv_item_gesture.tga";
++				break;
++			case ACTIVITY_SOUND:
++				icon = "inv_item_sound.tga";
++				break;
++			case ACTIVITY_REZZING:
++				icon = "ff_edit_theirs.tga";
++				break;
++			case ACTIVITY_PARTICLES:
++				// TODO: Replace with something better
++				icon = "account_id_green.tga";
++				break;
++			case ACTIVITY_NEW:
++				icon = avatar_new.asString();
++				break;
++			case ACTIVITY_TYPING:
++				icon = avatar_typing.asString();
++				break;
++			case ACTIVITY_DEAD:
++				// TODO: Replace, icon is quite inappropiate
++				icon = avatar_gone.asString();
++				break;
++		}
++
++		element["columns"][LIST_ACTIVITY]["column"] = "activity";
++		element["columns"][LIST_ACTIVITY]["type"] = "text";
++
++		if (!icon.empty() )
++		{	
++			element["columns"][LIST_ACTIVITY]["type"] = "icon";
++			element["columns"][LIST_ACTIVITY]["value"] = icon;
++			//llinfos << "Activity icon: " << activity_icon << llendl;
++		}
++		
++		char tempentered[32];
++		F32 entered = ent->getEntryEnteredSeconds();
++		snprintf(tempentered, sizeof(tempentered), "%u", (unsigned int)(entered/60.0));
++		element["columns"][LIST_ENTERED]["column"] = "entered";
++		element["columns"][LIST_ENTERED]["type"] = "text";
++		element["columns"][LIST_ENTERED]["value"] = tempentered;
++		element["columns"][LIST_ENTERED]["color"] = getAvatarColor(ent, distance, CT_ENTERED).getValue();
++
++		// Add to list
++		mAvatarList->addElement(element, ADD_BOTTOM);
++
++		// Request data only if fetching avatar data is enabled
++		if ( fetch_data->getValue() && ent->mAvatarInfo.requestIfNeeded() )
++		{
++			sendAvatarPropertiesRequest(av_id);
++			llinfos << "Data for avatar " << ent->getName() << " didn't arrive yet, retrying" << llendl;
++		}
++
++		/*if ( ent->mTrustNetScore.requestIfNeeded() )
++		{
++			requestTrustNetScore(av_id, ent->getName(), "behavior");
++			llinfos << "Requesting TrustNet score for " << ent->getName() << llendl;
++		}*/
++		
++		//if ( db_enabled && ent->mMiscInfo.requestIfNeeded() )
++		//{
++		//	requestMiscInfo(av_id, ent->getName());
++		//	llinfos << "Requesting misc info for " << ent->getName() << llendl;
++		//}
++	}
++
++	// finish
++	mAvatarList->sort();
++	mAvatarList->selectMultiple(selected);
++	mAvatarList->setScrollPos(scrollpos);
++
++//	llinfos << "avatar list refresh: done" << llendl;
++
++}
++
++// static
++void LLFloaterAvatarList::onClickIM(void* userdata)
++{
++	//llinfos << "LLFloaterFriends::onClickIM()" << llendl;
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++
++	LLDynamicArray<LLUUID> ids = avlist->mAvatarList->getSelectedIDs();
++	if(ids.size() > 0)
++	{
++		if(ids.size() == 1)
++		{
++			// Single avatar
++			LLUUID agent_id = ids[0];
++
++			char buffer[MAX_STRING];
++			snprintf(buffer, MAX_STRING, "%s", avlist->mAvatars[agent_id].getName().c_str());
++			gIMMgr->setFloaterOpen(TRUE);
++			gIMMgr->addSession(
++				buffer,
++				IM_NOTHING_SPECIAL,
++				agent_id);
++		}
++		else
++		{
++			// Group IM
++			LLUUID session_id;
++			session_id.generate();
++			gIMMgr->setFloaterOpen(TRUE);
++			gIMMgr->addSession("Avatars Conference", IM_SESSION_CONFERENCE_START, ids[0], ids);
++		}
++	}
++}
++
++void LLFloaterAvatarList::onClickTrack(void *userdata)
++{
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++	
++ 	LLScrollListItem *item =   avlist->mAvatarList->getFirstSelected();
++	if (!item) return;
++
++	LLUUID agent_id = item->getUUID();
++
++	if ( avlist->mTracking && avlist->mTrackedAvatar == agent_id ) {
++		LLTracker::stopTracking(NULL);
++		avlist->mTracking = FALSE;
++	}
++	else
++	{
++		avlist->mTracking = TRUE;
++		avlist->mTrackByLocation = FALSE;
++		avlist->mTrackedAvatar = agent_id;
++		LLTracker::trackAvatar(agent_id, avlist->mAvatars[agent_id].getName());
++	}
++}
++
++void LLFloaterAvatarList::sendAvatarPropertiesRequest(LLUUID avid)
++{
++	
++
++	lldebugs << "LLPanelAvatar::sendAvatarPropertiesRequest()" << llendl; 
++	LLMessageSystem *msg = gMessageSystem;
++
++	msg->newMessageFast(_PREHASH_AvatarPropertiesRequest);
++	msg->nextBlockFast( _PREHASH_AgentData);
++	msg->addUUIDFast(   _PREHASH_AgentID, gAgent.getID() );
++	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
++	msg->addUUIDFast(   _PREHASH_AvatarID, avid);
++	gAgent.sendReliableMessage();
++
++	mAvatars[avid].mAvatarInfo.requestStarted();
++}
++
++// static
++void LLFloaterAvatarList::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
++{
++
++	
++	LLFloaterAvatarList* self = NULL;
++	LLAvatarInfo avinfo;
++
++	BOOL	identified = FALSE;
++	BOOL	transacted = FALSE;
++
++	LLUUID	agent_id;	// your id
++	LLUUID	avatar_id;	// target of this panel
++	U32	flags = 0x0;
++	char	born_on[DB_BORN_BUF_SIZE];
++	S32	charter_member_size = 0;
++
++	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
++	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
++
++	
++	self = gFloaterAvatarList;
++
++	// Verify that the avatar is in the list, if not, ignore.
++	if ( self->mAvatarList->getItemIndex(avatar_id) < 0 )
++	{
++		return;
++	}
++
++	LLAvatarListEntry *entry = &self->mAvatars[avatar_id];
++
++	msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_BornOn, DB_BORN_BUF_SIZE, born_on);
++	msg->getU32Fast(_PREHASH_PropertiesData, _PREHASH_Flags, flags);
++
++	identified = (flags & AVATAR_IDENTIFIED);
++	transacted = (flags & AVATAR_TRANSACTED);
++
++	// What's this?
++	// Let's see if I understand correctly: CharterMember property is dual purpose:
++	// it either contains a number indicating an account type (usual value), or 
++	// it contains a string with a custom title. Probably that's where Philip Linden's
++	// "El Presidente" title comes from. Heh.
++	U8 caption_index = 0;
++	std::string caption_text;
++	charter_member_size = msg->getSize("PropertiesData", "CharterMember");
++
++	if(1 == charter_member_size)
++	{
++		msg->getBinaryData("PropertiesData", "CharterMember", &caption_index, 1);
++	}
++	else if(1 < charter_member_size)
++	{
++		char caption[MAX_STRING];
++		msg->getString("PropertiesData", "CharterMember", MAX_STRING, caption);
++
++		caption_text = caption;
++		entry->setAccountCustomTitle(caption_text);
++	}
++		
++
++	if(caption_text.empty())
++	{
++		
++		const enum ACCOUNT_TYPE ACCT_TYPE[] = {
++			ACCOUNT_RESIDENT,
++			ACCOUNT_TRIAL,
++			ACCOUNT_CHARTER_MEMBER,
++			ACCOUNT_EMPLOYEE
++		};
++
++		//enum ACCOUNT_TYPE acct =
++		avinfo.Account =  ACCT_TYPE[llclamp(caption_index, (U8)0, (U8)(sizeof(ACCT_TYPE)/sizeof(ACCT_TYPE[0])-1))];
++		//entry->setAccountType(acct);
++
++		
++		if ( avinfo.Account != ACCOUNT_EMPLOYEE )
++		{
++			if ( transacted )
++			{
++				avinfo.Payment = PAYMENT_USED;
++			}
++			else if ( identified )
++			{
++				avinfo.Payment = PAYMENT_ON_FILE;
++			}
++			else
++			{
++				avinfo.Payment = PAYMENT_NONE;
++			}
++		}
++		else
++		{
++			avinfo.Payment = PAYMENT_LINDEN;
++		}
++	}
++	
++	// Structure must be zeroed to have sane results, as we
++	// have an incomplete string for input
++	memset(&avinfo.BirthDate, 0, sizeof(avinfo.BirthDate));
++
++	int num_read = sscanf(born_on, "%d/%d/%d", &avinfo.BirthDate.tm_mon,
++	                                           &avinfo.BirthDate.tm_mday,
++	                                           &avinfo.BirthDate.tm_year);
++
++	if ( num_read == 3 && avinfo.BirthDate.tm_mon <= 12 )
++	{
++		avinfo.BirthDate.tm_year -= 1900;
++		avinfo.BirthDate.tm_mon--;
++	}
++	else
++	{
++		// Zero again to remove any partially read data
++		memset(&avinfo.BirthDate, 0, sizeof(avinfo.BirthDate));
++		llwarns << "Error parsing birth date: " << born_on << llendl;
++	}
++
++	entry->mAvatarInfo.setValue(avinfo);
++}
++
++void LLFloaterAvatarList::checkTrackingStatus()
++{
++
++	if ( mTracking && LLTracker::getTrackedPositionGlobal().isExactlyZero() )
++	{
++		// trying to track an avatar, but tracker stopped tracking		
++		if ( mAvatars.count( mTrackedAvatar ) > 0 && !mTrackByLocation )
++		{
++			llinfos << "Switching to location-based tracking" << llendl;
++			mTrackByLocation = TRUE;
++		}
++		else
++		{
++			// not found
++			llinfos << "Stopping tracking avatar, server-side didn't work, and not in list anymore." << llendl;
++			LLTracker::stopTracking(NULL);
++			mTracking = FALSE;
++		}
++	}
++
++	if ( mTracking && mTrackByLocation )
++	{
++		std::string name = mAvatars[mTrackedAvatar].getName();
++		std::string tooltip = "Tracking last known position";
++		name += " (near)";
++		LLTracker::trackLocation(mAvatars[mTrackedAvatar].getPosition(), name, tooltip);
++	}
++
++	//llinfos << "Tracking position: " << LLTracker::getTrackedPositionGlobal() << llendl;
++	
++}
++
++
++BOOL  LLFloaterAvatarList::avatarIsInList(LLUUID avatar)
++{
++	return ( mAvatars.count( avatar ) > 0 );
++}
++
++LLAvatarListEntry * LLFloaterAvatarList::getAvatarEntry(LLUUID avatar)
++{
++	if ( avatar.isNull() )
++	{
++		return NULL;
++	}
++
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++
++	iter = mAvatars.find(avatar);
++	if ( iter == mAvatars.end() )
++	{
++		return NULL;
++	}
++
++	return &iter->second;	
++	
++	//if ( mAvatars.count( avatar ) < 0 )
++	//{
++		//return NULL;
++	//}
++
++	//return &mAvatars[avatar];
++}
++
++void LLFloaterAvatarList::speakText(S32 channel, EChatType type, std::string text)
++{
++	LLMessageSystem* msg = gMessageSystem;
++
++	msg->newMessageFast(_PREHASH_ChatFromViewer);
++	msg->nextBlockFast(_PREHASH_AgentData);
++	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
++	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
++	msg->nextBlockFast(_PREHASH_ChatData);
++	msg->addStringFast(_PREHASH_Message, text);
++	msg->addU8Fast(_PREHASH_Type, type);
++	msg->addS32("Channel", channel);
++
++	gAgent.sendReliableMessage();
++
++	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_CHAT_COUNT);
++}
++
++
++void LLFloaterAvatarList::requestTrustNetScore(LLUUID avatar, const std::string name, const std::string type)
++{
++	char *temp = new char[UUID_STR_LENGTH];
++	avatar.toString(temp);
++
++	std::string text = "GetScore|" + name + "|" + temp + "|" + type;
++	speakText(TRUSTNET_CHANNEL, CHAT_TYPE_WHISPER, text);
++}
++
++//static
++void LLFloaterAvatarList::replaceVars(std::string &str, LLUUID avatar, const std::string& name)
++{
++	char *temp = new char[UUID_STR_LENGTH];
++	avatar.toString(temp);
++
++	std::string vars[][2] = {
++		{"$NAME", name},
++		{"$KEY",  temp},
++	};
++
++	BOOL replaced = TRUE;
++
++	while( replaced )
++	{
++		replaced = FALSE;
++		for(U32 i=0;i<sizeof(vars)/sizeof(vars[0]);i++)
++		{
++			std::string::size_type pos = str.find(vars[i][0]);
++			if ( pos != std::string::npos )
++			{
++				str.replace(pos, vars[i][0].size(), vars[i][1]);
++				replaced = TRUE;
++			}
++		}
++	}
++
++}
++
++void LLFloaterAvatarList::requestMiscInfo(LLUUID avatar, const std::string name)
++{
++	//LLUUID   db_av_key;
++
++	//std::string message      = gSavedPerAccountSettings.getString("DBSendPattern");
++	//std::string db_av_name   = gSavedPerAccountSettings.getString("DBAvatarName");
++	//db_av_key.set(gSavedPerAccountSettings.getString("DBAvatarKey"));
++
++	
++	//llinfos << "Requesting info " << llendl;
++	//replaceVars(message, avatar, name);
++
++	//llinfos << "Request string: " << message << llendl;
++	//send_simple_im(db_av_key, message.c_str());
++ }
++
++//static
++BOOL LLFloaterAvatarList::handleIM(LLUUID from_id, const std::string message)
++{
++	LLUUID   db_av_key;
++	//db_av_key.set(gSavedPerAccountSettings.getString("DBAvatarKey"));
++
++	if ( db_av_key == from_id )
++	{
++		std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++
++		for(iter = gFloaterAvatarList->mAvatars.begin(); iter != gFloaterAvatarList->mAvatars.end(); iter++)
++		{
++			LLAvatarListEntry *ent = &iter->second;
++		
++			// Check if the key, or the name are found in the reply.
++			// Name is only accepted if it's in the beginning of the message.
++			if ( message.find(ent->getID().asString()) != std::string::npos
++			     || message.find(ent->getName().c_str()) == 0 )
++			{
++				LLMiscDBInfo info;
++				info.data = message;
++
++				llinfos << "Database reply arrived for avatar " << ent->getName() << llendl;
++				ent->mMiscInfo.setValue(info);
++			}
++		}
++
++		return TRUE;
++	}
++	return FALSE;
++}
++
++//static
++void LLFloaterAvatarList::processTrustNetReply(char *reply)
++{
++	char *tokens[10];
++	char *tmp = &reply[0];
++	U32 count = 0;
++
++	llinfos << "TrustNet reply: " << reply << llendl;
++	
++
++	// Split into tokens
++	while( (NULL != (tmp = strtok(tmp, "|"))) && count < (sizeof(tokens)/sizeof(tokens[0])) )
++	{
++		tokens[count++] = tmp;
++		llinfos << "token: " << tmp << llendl;
++		tmp = NULL;
++	}
++
++	llinfos << "Got " << count << " tokens" << llendl;
++
++	if ( count >= 1 )
++	{
++		if (!strcmp(tokens[0], "Score") && count >= 4)
++		{
++			//format: key|type|score
++			LLUUID avatar(tokens[1]);
++			std::string type = tokens[2];
++			F32 score = (F32)strtod(tokens[3], NULL);
++			
++			LLAvatarListEntry *ent = gFloaterAvatarList->getAvatarEntry(avatar);
++			if ( ent != NULL )
++			{
++				LLAvListTrustNetScore s(type, score);
++				ent->mTrustNetScore.setValue(s);
++				llinfos << "Score arrived for avatar " << avatar << ": " << score << llendl;
++			}
++			else
++			{
++				llinfos << "Score arrived for avatar " << avatar << ", but it wasn't in the list anymore" << llendl;
++			}
++		}
++		else if (!strcmp(tokens[0], "WebAuthToken") && count >= 2)
++		{
++			std::string URL = LLWeb::escapeURL(llformat("http://trustnet.daleglass.net/?session=%s", tokens[1]));
++ 			LLWeb::loadURL(URL);
++		}
++		else if (!strcmp(tokens[0], "WebPassword") && count >= 2)
++		{
++			std::string password = tokens[1];
++			gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(password));
++		}
++		else
++		{
++			llwarns << "Unrecognized TrustNet reply " << tokens[0] << llendl;
++		}
++	}
++}
++
++void LLFloaterAvatarList::luskwoodCommand(std::string cmd)
++{
++	LLDynamicArray<LLUUID> ids = mAvatarList->getSelectedIDs();
++
++	for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
++	{
++		LLUUID avid = *itr;
++		LLAvatarListEntry *ent = getAvatarEntry(avid);
++		if ( ent != NULL )
++		{
++			//llinfos << "Would say: " << cmd << " " << ent->getName() << llendl;
++			// Use key got gokey, name for everything else
++			speakText(0, CHAT_TYPE_SHOUT, cmd + " " + ( cmd == "gokey" ? ent->getID().asString() :  ent->getName() ) );
++		}
++	}
++}
++
++//static
++void LLFloaterAvatarList::onClickMark(void *userdata)
++{
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++	LLDynamicArray<LLUUID> ids = avlist->mAvatarList->getSelectedIDs();
++
++	for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
++	{
++		LLUUID avid = *itr;
++		LLAvatarListEntry *ent = avlist->getAvatarEntry(avid);
++		if ( ent != NULL )
++		{
++			ent->toggleMark();
++		}
++	}
++}
++
++void LLFloaterAvatarList::handleLuskwoodDialog(S32 option, void* data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++	if ( 0 == option )
++	{
++		self->luskwoodCommand(self->mLuskwoodCommand);
++	}
++}
++
++void LLFloaterAvatarList::handleLuskwoodGohomerOffDialog(S32 option, void* data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++	if ( 0 == option )
++	{
++		self->speakText(0, CHAT_TYPE_SHOUT, "gohome off");
++	}
++}
++
++//static
++void LLFloaterAvatarList::onClickGohomerWarn(void *data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++
++	self->mLuskwoodCommand = "gowarn";
++	gViewerWindow->alertXml("LuskwoodGohomerWarn", handleLuskwoodDialog, self);
++
++}
++
++//static
++void LLFloaterAvatarList::onClickGohomerEject(void *data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++
++	self->mLuskwoodCommand = "goeject";
++	gViewerWindow->alertXml("LuskwoodGohomerEject", handleLuskwoodDialog, self);
++}
++
++//static
++void LLFloaterAvatarList::onClickGohomerSendAway(void *data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++
++	self->mLuskwoodCommand = "goaway";
++	gViewerWindow->alertXml("LuskwoodGohomerKeepAway", handleLuskwoodDialog, self);
++}
++
++//static
++void LLFloaterAvatarList::onClickGohomerSendHome(void *data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++
++	self->mLuskwoodCommand = "gohome";
++	gViewerWindow->alertXml("LuskwoodGohomerSendHome", handleLuskwoodDialog, self);
++}
++
++//static
++void LLFloaterAvatarList::onClickGohomerSendHomeByKey(void *data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++
++	self->mLuskwoodCommand = "gokey";
++	gViewerWindow->alertXml("LuskwoodGohomerSendHome", handleLuskwoodDialog, self);
++}
++
++
++//static
++void LLFloaterAvatarList::onClickGohomerOff(void *data)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)data;
++
++	gViewerWindow->alertXml("LuskwoodGohomerOff", handleLuskwoodGohomerOffDialog, self);
++}
++
++LLColor4 LLFloaterAvatarList::getAvatarColor(LLAvatarListEntry *ent, F32 distance, e_coloring_type type)
++{
++ 	F32 r = 0.0f, g = 0.0f, b = 0.0f, a = 1.0f;
++
++	switch(type)
++	{
++		case CT_NONE:
++			return LLColor4::black;
++			break;
++		case CT_DISTANCE:
++			if ( distance <= 10.0f )
++			{
++				// whisper range
++				g = 0.7f - ( distance / 20.0f );
++			}
++			else if ( distance > 10.0f && distance <= 20.0f )
++			{
++				// talk range
++				g = 0.7f - ( (distance - 10.0f) / 20.0f );
++				b = g;
++			}
++			else if ( distance > 20.0f && distance <= 96.0f )
++			{
++				// shout range
++				r = 0.7f - ( (distance - 20.0f) / 192.0f );
++				b = r;
++			}
++			else
++			{
++				// unreachable by chat
++				r = 1.0;
++			}
++			break;
++		case CT_AGE:
++			if ( ent->mAvatarInfo.getStatus() == DATA_RETRIEVED )
++			{
++				S32 age = ent->mAvatarInfo.getValue().getAge();
++				if ( age < 14 )
++				{
++					r = 0.7f - ( age / 28 );
++				}
++				else if ( age > 14 && age <= 30 )
++				{
++					r = 0.7f - ( (age-14) / 32 );
++					g = r;
++				}
++				else if ( age > 30 && age < 90 )
++				{
++					g = 0.7f - ( (age-30) / 120 );
++				}
++				else
++				{
++					b = 1.0f;
++				}
++			}
++			break;
++		case CT_SCORE:
++			if ( ent->mTrustNetScore.getStatus() == DATA_RETRIEVED )
++			{
++				F32 score = ent->mTrustNetScore.getValue().Score;
++
++				if ( score == 0.0 )
++				{
++					b = 1.0f;
++				}
++				else if ( score == 10.0f )
++				{
++					g = 1.0f;
++				}
++				else if ( score == -10.0f )
++				{
++					r = 1.0f;
++				}
++				else if ( score > 0.0f )
++				{
++					g = 0.2f + ( score / 20.0f );
++				}
++				else if ( score < 0.0f )
++				{ 
++					r = 0.2f + ( score / 20.0f );
++				}
++			}
++			break;
++		case CT_PAYMENT:
++			break;
++		case CT_ENTERED:
++			F32 entered = ent->getEntryEnteredSeconds();
++			if (distance <= 20.0f)
++			{
++				if ( entered <= ( 5.0f * 60.0f ) )
++				{
++					r = 0.7f - ( entered / ( 4.0f * 5.0f * 60.0f ) );
++					b = 1.0f - ( ( ( 5.0f * 60.0f ) - entered) / ( 5.0f * 60.0f ) );
++				}
++				else
++				{
++					b = 1.0f;
++				}
++			}
++			else
++			{
++				r = g = b = 0.5f;
++			}
++			break;
++	}
++
++	return LLColor4(r,g,b,a);
++}
++
++void LLFloaterAvatarList::onDoubleClick(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++ 	LLScrollListItem *item =   self->mAvatarList->getFirstSelected();
++	LLUUID agent_id = item->getUUID();
++	LLAvatarListEntry *ent = 0;
++
++	if ( self->mAvatars.count( agent_id ) )
++	{
++		ent = &self->mAvatars[ agent_id ];
++	}
++
++	if ( ent && ent->getIsCoarse() )
++	{
++		// nothing to look at, manipulate camera directly
++		LLQuaternion rot;
++		
++		LLMatrix3 mat(rot);
++
++		LLVector3 pos( ent->getPosition() );
++
++		LLViewerCamera::getInstance()->setView(1.0);
++		LLViewerCamera::getInstance()->setOrigin( pos );
++		LLViewerCamera::getInstance()->mXAxis = LLVector3(mat.mMatrix[0]);
++		LLViewerCamera::getInstance()->mYAxis = LLVector3(mat.mMatrix[1]);
++		LLViewerCamera::getInstance()->mZAxis = LLVector3(mat.mMatrix[2]);	}
++	else
++	{
++		gAgent.lookAtObject(agent_id, CAMERA_POSITION_OBJECT);
++	}
++}
++
++void LLFloaterAvatarList::removeFocusFromAll()
++{
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++
++	for(iter = mAvatars.begin(); iter != mAvatars.end(); iter++)
++	{
++		LLAvatarListEntry *ent = &iter->second;
++		ent->setFocus(FALSE);
++	}
++}
++
++void LLFloaterAvatarList::focusOnPrev(BOOL marked_only)
++{
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++	LLAvatarListEntry *prev = NULL;
++	LLAvatarListEntry *ent;
++
++	if ( mAvatars.size() == 0 )
++	{
++		return;
++	}
++
++	for(iter = mAvatars.begin(); iter != mAvatars.end(); iter++)
++	{
++		ent = &iter->second;
++
++		if ( ent->isDead() )
++			continue;
++
++		if ( (ent->getID() == mFocusedAvatar) && (prev != NULL)  )
++		{
++			removeFocusFromAll();
++			prev->setFocus(TRUE);
++			mFocusedAvatar = prev->getID();
++			gAgent.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT);
++			return;
++		}
++
++		if ( (!marked_only) || ent->isMarked() )
++		{
++			prev = ent;
++		}
++	}
++
++	if (prev != NULL && ((!marked_only) || prev->isMarked()) )
++	{
++		removeFocusFromAll();
++		prev->setFocus(TRUE);
++		mFocusedAvatar = prev->getID();
++		gAgent.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT);
++	}
++}
++
++void LLFloaterAvatarList::focusOnNext(BOOL marked_only)
++{
++
++	
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++	BOOL found = FALSE;
++	LLAvatarListEntry *first = NULL;
++	LLAvatarListEntry *ent;
++
++	if ( mAvatars.size() == 0 )
++	{
++		return;
++	}
++
++	for(iter = mAvatars.begin(); iter != mAvatars.end(); iter++)
++	{
++		ent = &iter->second;
++
++		if ( ent->isDead() )
++			continue;
++
++		if ( NULL == first && ((!marked_only) || ent->isMarked()))
++		{
++			first = ent;
++		}
++
++		if ( found && ((!marked_only) || ent->isMarked()) )
++		{
++			removeFocusFromAll();
++			ent->setFocus(TRUE);
++			mFocusedAvatar = ent->getID();
++			gAgent.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT);
++			return;
++		}
++
++		if ( ent->getID() == mFocusedAvatar )
++		{
++			found = TRUE;
++		} 
++	}
++
++	if (first != NULL && ((!marked_only) || first->isMarked()))
++	{
++		removeFocusFromAll();
++		first->setFocus(TRUE);
++		mFocusedAvatar = first->getID();
++		gAgent.lookAtObject(mFocusedAvatar, CAMERA_POSITION_OBJECT);
++	}
++}
++//static
++void LLFloaterAvatarList::onClickPrevInList(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	self->focusOnPrev(FALSE);
++}
++
++//static
++void LLFloaterAvatarList::onClickNextInList(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	self->focusOnNext(FALSE);
++}
++
++//static
++void LLFloaterAvatarList::onClickPrevMarked(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	self->focusOnPrev(TRUE);
++}
++
++//static
++void LLFloaterAvatarList::onClickNextMarked(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	self->focusOnNext(TRUE);
++}
++
++//static
++void LLFloaterAvatarList::onClickTrustNetRate(void *userdata)
++{
++	// LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	llinfos << "Ratings not implemented yet" << llendl;
++}
++
++//static
++void LLFloaterAvatarList::onClickTrustNetExplain(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	LLScrollListItem *item =   self->mAvatarList->getFirstSelected();
++
++	if ( item != NULL )
++	{
++		LLAvatarListEntry *ent = self->getAvatarEntry(item->getUUID());
++		self->speakText(TRUSTNET_CHANNEL, CHAT_TYPE_WHISPER, "Explain|" + ent->getName() + "|" + ent->getID().asString());
++	}
++}
++
++//static
++void LLFloaterAvatarList::onClickTrustNetWebsite(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++
++	self->speakText(TRUSTNET_CHANNEL, CHAT_TYPE_WHISPER, "GetWebAuthToken");
++}
++
++//static
++void LLFloaterAvatarList::onClickTrustNetGetPassword(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++
++	self->speakText(TRUSTNET_CHANNEL, CHAT_TYPE_WHISPER, "GetWebPassword");
++}
++
++//static
++void LLFloaterAvatarList::onClickTrustNetRenew(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++	self->speakText(TRUSTNET_CHANNEL, CHAT_TYPE_WHISPER, "RenewSubscription");
++}
++
++//static
++void LLFloaterAvatarList::onClickGetKey(void *userdata)
++{
++	LLFloaterAvatarList *self = (LLFloaterAvatarList*)userdata;
++ 	LLScrollListItem *item = self->mAvatarList->getFirstSelected();
++
++	if ( NULL == item ) return;
++
++	LLUUID agent_id = item->getUUID();
++
++	char buffer[UUID_STR_LENGTH];		/*Flawfinder: ignore*/
++	agent_id.toString(buffer);
++
++	gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
++}
++
++
++static void send_freeze(const LLUUID& avatar_id, bool freeze)
++{
++	U32 flags = 0x0;
++	if (!freeze)
++	{
++		// unfreeze
++		flags |= 0x1;
++	}
++
++	LLMessageSystem* msg = gMessageSystem;
++	LLViewerObject* avatar = gObjectList.findObject(avatar_id);
++
++	if (avatar)
++	{
++		msg->newMessage("FreezeUser");
++		msg->nextBlock("AgentData");
++		msg->addUUID("AgentID", gAgent.getID());
++		msg->addUUID("SessionID", gAgent.getSessionID());
++		msg->nextBlock("Data");
++		msg->addUUID("TargetID", avatar_id );
++		msg->addU32("Flags", flags );
++		msg->sendReliable( avatar->getRegion()->getHost() );
++	}
++}
++
++static void send_eject(const LLUUID& avatar_id, bool ban)
++{	
++	LLMessageSystem* msg = gMessageSystem;
++	LLViewerObject* avatar = gObjectList.findObject(avatar_id);
++
++	if (avatar)
++	{
++		U32 flags = 0x0;
++		if ( ban )
++		{
++			// eject and add to ban list
++			flags |= 0x1;
++		}
++
++		msg->newMessage("EjectUser");
++		msg->nextBlock("AgentData");
++		msg->addUUID("AgentID", gAgent.getID() );
++		msg->addUUID("SessionID", gAgent.getSessionID() );
++		msg->nextBlock("Data");
++		msg->addUUID("TargetID", avatar_id );
++		msg->addU32("Flags", flags );
++		msg->sendReliable( avatar->getRegion()->getHost() );
++	}
++}
++
++static void send_estate_message(
++	const char* request,
++	const LLUUID &target)
++{
++
++	LLMessageSystem* msg = gMessageSystem;
++	LLUUID invoice;
++
++	// This seems to provide an ID so that the sim can say which request it's
++	// replying to. I think this can be ignored for now.
++	invoice.generate();
++
++	llinfos << "Sending estate request '" << request << "'" << llendl;
++	msg->newMessage("EstateOwnerMessage");
++	msg->nextBlockFast(_PREHASH_AgentData);
++	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
++	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
++	msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
++	msg->nextBlock("MethodData");
++	msg->addString("Method", request);
++	msg->addUUID("Invoice", invoice);
++
++	// Agent id
++	msg->nextBlock("ParamList");
++	msg->addString("Parameter", gAgent.getID().asString().c_str());
++
++	// Target
++	msg->nextBlock("ParamList");
++	msg->addString("Parameter", target.asString().c_str());
++
++	msg->sendReliable(gAgent.getRegion()->getHost());
++}
++
++static void send_estate_ban(const LLUUID& agent)
++{
++	LLUUID invoice;
++	U32 flags = ESTATE_ACCESS_BANNED_AGENT_ADD;
++
++	invoice.generate();
++
++	LLMessageSystem* msg = gMessageSystem;
++	msg->newMessage("EstateOwnerMessage");
++	msg->nextBlockFast(_PREHASH_AgentData);
++	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
++	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
++	msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
++
++	msg->nextBlock("MethodData");
++	msg->addString("Method", "estateaccessdelta");
++	msg->addUUID("Invoice", invoice);
++
++	char buf[MAX_STRING];		/* Flawfinder: ignore*/
++	gAgent.getID().toString(buf);
++	msg->nextBlock("ParamList");
++	msg->addString("Parameter", buf);
++
++	snprintf(buf, MAX_STRING, "%u", flags);			/* Flawfinder: ignore */
++	msg->nextBlock("ParamList");
++	msg->addString("Parameter", buf);
++
++	agent.toString(buf);
++	msg->nextBlock("ParamList");
++	msg->addString("Parameter", buf);
++
++	gAgent.sendReliableMessage();
++}
++
++static void cmd_freeze(const LLUUID& avatar, const std::string &name)      { send_freeze(avatar, true); }
++static void cmd_unfreeze(const LLUUID& avatar, const std::string &name)    { send_freeze(avatar, false); }
++static void cmd_eject(const LLUUID& avatar, const std::string &name)       { send_eject(avatar, false); }
++static void cmd_ban(const LLUUID& avatar, const std::string &name)         { send_eject(avatar, true); }
++static void cmd_profile(const LLUUID& avatar, const std::string &name)     { LLFloaterAvatarInfo::showFromDirectory(avatar); }
++static void cmd_mute(const LLUUID&avatar, const std::string &name)         { LLMuteList::getInstance()->add(LLMute(avatar, name, LLMute::AGENT)); }
++static void cmd_unmute(const LLUUID&avatar, const std::string &name)       { LLMuteList::getInstance()->remove(LLMute(avatar, name, LLMute::AGENT)); }
++static void cmd_estate_eject(const LLUUID &avatar, const std::string &name){ send_estate_message("teleporthomeuser", avatar); }
++static void cmd_estate_ban(const LLUUID &avatar, const std::string &name)
++{
++	send_estate_message("teleporthomeuser", avatar); // Kick first, just to be sure
++	send_estate_ban(avatar);
++}
++
++void LLFloaterAvatarList::doCommand(void (*func)(const LLUUID &avatar, const std::string &name))
++{
++	LLDynamicArray<LLUUID> ids = mAvatarList->getSelectedIDs();
++
++	for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
++	{
++		LLUUID avid = *itr;
++		LLAvatarListEntry *ent = getAvatarEntry(avid);
++		if ( ent != NULL )
++		{
++			llinfos << "Executing command on " << ent->getName() << llendl;
++			func(avid, ent->getName());
++		}
++	}
++}
++
++std::string LLFloaterAvatarList::getSelectedNames(const std::string& separator)
++{
++	std::string ret = "";
++	
++	LLDynamicArray<LLUUID> ids = mAvatarList->getSelectedIDs();
++	for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
++	{
++		LLUUID avid = *itr;
++		LLAvatarListEntry *ent = getAvatarEntry(avid);
++		if ( ent != NULL )
++		{
++			if (!ret.empty()) ret += separator;
++			ret += ent->getName();
++		}
++	}
++
++	return ret;
++}
++
++//static 
++void LLFloaterAvatarList::callbackFreeze(S32 option, void *userdata) { 
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++
++	if ( option == 0 )
++	{
++		avlist->doCommand(cmd_freeze);
++	}
++	else if ( option == 1 )
++	{
++		avlist->doCommand(cmd_unfreeze);
++	}
++}
++
++//static 
++void LLFloaterAvatarList::callbackEject(S32 option, void *userdata) {
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++ 
++	if ( option == 0 )
++	{
++		avlist->doCommand(cmd_eject);
++	}
++	else if ( option == 1 )
++	{
++		avlist->doCommand(cmd_ban);
++	}
++}
++
++//static 
++void LLFloaterAvatarList::callbackMute(S32 option, void *userdata) {
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++
++	if ( option == 0 )
++	{
++		avlist->doCommand(cmd_mute);
++	} 
++	else if ( option == 1 )
++	{
++		avlist->doCommand(cmd_unmute);
++	}
++}
++
++//static 
++void LLFloaterAvatarList::callbackEjectFromEstate(S32 option, void *userdata) {
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++
++	if ( option == 0 )
++	{
++		avlist->doCommand(cmd_estate_eject);
++	} 
++	else if ( option == 1 )
++	{
++		avlist->doCommand(cmd_estate_ban);
++	}
++}
++
++//static
++void LLFloaterAvatarList::onClickFreeze(void *userdata)
++{
++	LLStringUtil::format_map_t args;
++	args["[NAMES]"] = ((LLFloaterAvatarList*)userdata)->getSelectedNames();
++	gViewerWindow->alertXml("AvatarListFreezeAvatars", args, callbackFreeze, userdata);
++}
++
++//static
++void LLFloaterAvatarList::onClickEject(void *userdata)
++{
++	LLStringUtil::format_map_t args;
++	args["[NAMES]"] = ((LLFloaterAvatarList*)userdata)->getSelectedNames();
++	gViewerWindow->alertXml("AvatarListEjectAvatars", args, callbackEject, userdata);
++}
++
++//static
++void LLFloaterAvatarList::onClickMute(void *userdata)
++{
++	LLStringUtil::format_map_t args;
++	args["[NAMES]"] = ((LLFloaterAvatarList*)userdata)->getSelectedNames();
++	gViewerWindow->alertXml("AvatarListMuteAvatars", args, callbackMute, userdata);
++}
++
++//static
++void LLFloaterAvatarList::onClickEjectFromEstate(void *userdata)
++{
++	LLStringUtil::format_map_t args;
++	args["[NAMES]"] = ((LLFloaterAvatarList*)userdata)->getSelectedNames();
++	gViewerWindow->alertXml("AvatarListEjectAvatarsFromEstate", args, callbackEjectFromEstate, userdata);
++}
++
++
++
++//static
++void LLFloaterAvatarList::onClickAR(void *userdata)
++{
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++	LLDynamicArray<LLUUID> ids = avlist->mAvatarList->getSelectedIDs();
++
++	for(LLDynamicArray<LLUUID>::iterator itr = ids.begin(); itr != ids.end(); ++itr)
++	{
++		LLUUID avid = *itr;
++		llinfos << "Adding " << avid << " to AR queue" << llendl;
++		avlist->mARQueue.push( avid );
++	}
++}
++
++// static
++void LLFloaterAvatarList::onClickProfile(void* userdata)
++{
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++	avlist->doCommand(cmd_profile);
++}
++
++//static
++void LLFloaterAvatarList::onClickTeleport(void* userdata)
++{
++	LLFloaterAvatarList *avlist = (LLFloaterAvatarList*)userdata;
++ 	LLScrollListItem *item =   avlist->mAvatarList->getFirstSelected();
++
++	if ( item )
++	{
++		LLUUID agent_id = item->getUUID();
++		LLAvatarListEntry *ent = avlist->getAvatarEntry(agent_id);
++		
++		if ( ent )
++		{
++			llinfos << "Trying to teleport to " << ent->getName() << " at " << ent->getPosition() << llendl;
++			gAgent.teleportViaLocation( ent->getPosition() );
++		}
++	}
++}
++
++
++void LLFloaterAvatarList::renderDebugBeacons()
++{
++	LLFastTimer t(LLFastTimer::FTM_TEMP1);
++	std::map<LLUUID, LLAvatarListEntry>::iterator iter;
++	for(iter = mAvatars.begin(); iter != mAvatars.end(); ++iter)
++	{
++		LLAvatarListEntry entry = iter->second;
++		if ( entry.isDead() )
++		{ // remove HUD Object if it exists
++			if ( mHudObjectMap.count(entry.getID()) )
++			{
++				mHudObjectMap[entry.getID()]->markDead();
++				mHudObjectMap.erase(entry.getID());
++			}
++			continue;
++		}
++
++		std::string name = entry.getName();
++		LLVector3d avpos = entry.getPosition();
++		LLVector3d mypos = gAgent.getPositionGlobal();
++		LLVector3d delta = avpos - mypos;
++		F32 distance = (F32)delta.magVec();
++		
++		std::string info = llformat( "%s %.02fm", name.c_str(), distance );
++		LLVector3 agentpos = gAgent.getPosAgentFromGlobal( avpos );
++
++		// roll our own HUD text since the debug beacons are rendered too late (after HUD update)
++		if (mHudObjectMap.count(entry.getID()) == 0)
++		{
++			mHudObjectMap[entry.getID()] = LLHUDObject::addHUDObject(LLHUDObject::LL_HUD_TEXT);
++		}
++		LLHUDText* hud_textp = (LLHUDText *)mHudObjectMap[entry.getID()].get(); // :-/
++		
++		hud_textp->setZCompare(FALSE);
++		hud_textp->setString(utf8str_to_wstring(info));
++		hud_textp->setColor(LLColor4::white);
++		hud_textp->setPositionAgent(agentpos);
++		hud_textp->setUseBubble(TRUE);
++		hud_textp->setMass(10.f);
++		hud_textp->setDoFade(FALSE);
++		//std::string posinfo = llformat("%f %f %f", agentpos[0], agentpos[1], agentpos[2]);
++		//hud_textp->setLabel(posinfo);
++
++		gObjectList.addDebugBeacon( agentpos, "", LLColor4(0.0f, 0.0f, 1.f, 0.5f), LLColor4::white, gSavedSettings.getS32("DebugBeaconLineWidth") );
++	}	
++}
++
++bool LLFloaterAvatarList::sRenderAvatarBeacons = true;
++
+diff --git a/indra/newview/llfloateravatarlist.h b/indra/newview/llfloateravatarlist.h
+new file mode 100644
+index 0000000..78df867
+--- /dev/null
++++ b/indra/newview/llfloateravatarlist.h
+@@ -0,0 +1,868 @@
++//
++// C++ Interface: llfloateravatarlist
++//
++// Description: 
++//
++//
++// Author: Dale Glass <dale at daleglass.net>, (C) 2007
++//
++// Copyright: See COPYING file that comes with this distribution
++//
++//
++#include "llfloater.h"
++#include "llfloaterreporter.h"
++#include "lluuid.h"
++#include "lltimer.h"
++#include "llchat.h"
++#include "llappviewer.h"
++#include "llscrolllistctrl.h"
++#include "llhudobject.h"
++
++#include <time.h>
++#include <map>
++
++class LLFloaterAvatarList;
++
++/**
++ * @brief Account type
++ */
++enum ACCOUNT_TYPE
++{
++	ACCOUNT_RESIDENT,         /** Normal resident */
++	ACCOUNT_TRIAL,            /** Trial account */
++	ACCOUNT_CHARTER_MEMBER,   /** Lifetime account obtained during beta */
++	ACCOUNT_EMPLOYEE,         /** Linden Lab employee */
++	ACCOUNT_CUSTOM            /** Custom account title specified. Seems to apply to Philip Linden */
++};
++
++/**
++ * @brief Payment data
++ */
++enum PAYMENT_TYPE
++{
++	PAYMENT_NONE,             /** No payment data on file */
++	PAYMENT_ON_FILE,          /** Payment data filled, but not used */
++	PAYMENT_USED,             /** Payment data used */
++	PAYMENT_LINDEN            /** Payment info doesn't apply (Linden, etc) */
++};
++
++
++/**
++ * @brief Activity
++ *
++ * This enum is ordered by priority, higher values have higher priority.
++ * Since we only have one column to show activity, priority decides what
++ * to show in case of conflict.
++ */
++enum ACTIVITY_TYPE
++{
++	ACTIVITY_NONE,           /** Avatar not doing anything */ 
++	ACTIVITY_MOVING,         /** Changing position */
++	ACTIVITY_GESTURING,	 /** Playing a gesture */
++	ACTIVITY_SOUND,          /** Playing a sound */
++	ACTIVITY_REZZING,        /** Rezzing objects */
++	ACTIVITY_PARTICLES,      /** Creating particles */
++	ACTIVITY_TYPING,         /** Typing */
++	ACTIVITY_NEW,            /** Avatar just appeared */
++	ACTIVITY_DEAD            /** Avatar isn't around anymore, and will be removed soon from the list */
++};
++
++enum DATA_STATUS
++{
++	DATA_UNKNOWN,
++	DATA_REQUESTING,
++	DATA_ERROR,
++	DATA_RETRIEVED
++};
++
++/**
++ * @brief How to color the user list
++ */
++enum e_coloring_type
++{
++	CT_NONE,
++	CT_DISTANCE,
++	CT_AGE,
++	CT_SCORE,
++	CT_PAYMENT,
++	CT_ENTERED
++};
++
++/**
++ * @brief Template class for a piece of data that must be retrieved
++ *
++ * This class handles the storage, retries and delays required to obtain a piece
++ * of data..
++ */
++template <class T> 
++class LLAvatarListDatum
++{
++public:
++	LLAvatarListDatum()
++	{
++		mMaxPending = 32;
++
++		mRetryDelay = 0.0f;
++		mRequestDelay = 1.0f;
++		mFirstRequestTimeout = 16.0f;
++		mMaxRequestTimeout = 8192.0f;
++
++		mRequestTimer.start();
++		mRequestDelayTimer.start();
++		mStatus = DATA_UNKNOWN;
++		
++	}
++
++	/**
++	 * @brief Determines whether a data re-request is needed
++	 * @returns TRUE if a re-request is needed
++	 *
++	 * This function takes the decision based on whether the data has
++	 * been already retrieved, the last data request was long enough ago,
++	 * and the request rate being low enough.
++	 *
++	 * A FALSE return value doesn't mean that everything is OK, only that
++	 * a retry shouldn't be made at this time.
++	 */
++	BOOL retryNeeded()
++	{
++		switch(mStatus)
++		{
++			case DATA_UNKNOWN:
++			case DATA_REQUESTING:
++			case DATA_ERROR:
++				// Don't request too many at once
++				if ( mPending >= mMaxPending )
++				{
++					return FALSE;
++				}
++
++				// Don't re-request if the requests would be made too fast
++				if ( mRequestDelayTimer.getElapsedTimeF32() < mRequestDelay )
++				{
++					return FALSE;
++				}
++
++				// Re-request if retry timeout was reached
++				return ( mRequestTimer.getElapsedTimeF32() > mRetryDelay );
++			case DATA_RETRIEVED:
++				return FALSE;
++		}
++
++		return FALSE;
++	}
++
++	/**
++	 * @brief Notifies the object that a request was started
++	 */
++	void requestStarted()
++	{
++
++		if ( mStatus != DATA_REQUESTING )
++		{
++			mPending++;
++			//llinfos << "Pe
++		}
++
++		mStatus = DATA_REQUESTING;
++
++		if ( mRetryDelay == 0 )
++		{
++			mRetryDelay = mFirstRequestTimeout;
++		}
++		else
++		{
++			if ( mRetryDelay < mMaxRequestTimeout )
++			{
++				mRetryDelay *= 2;
++			}
++		}
++
++		mRequestTimer.start();
++		mRequestDelayTimer.start();
++	}
++
++	/**
++	 * @brief retryNeeded and requestStarted combined
++	 * @returns TRUE if a re-request is needed
++	 */
++	BOOL requestIfNeeded()
++	{
++		BOOL ret = retryNeeded();
++		if ( ret )
++		{
++			requestStarted();
++		}
++
++		return ret;
++	}
++
++	/**
++	 * @brief Returns the request status
++	 */
++	DATA_STATUS getStatus()
++	{
++		if ( mStatus == DATA_REQUESTING 
++		     && mRequestTimer.getElapsedTimeF32() > mRetryDelay )
++		{
++			mStatus = DATA_ERROR;
++
++			// Consider this request failed, so the slot is free.
++			mPending--;
++		}
++
++		return mStatus;
++	}
++
++	T& getValue()
++	{
++		return mValue;
++	}
++
++	void setValue(T val)
++	{
++		if ( mStatus != DATA_RETRIEVED )
++		{
++			mPending--;
++		}
++
++		mValue = val;
++		mStatus = DATA_RETRIEVED;
++	}
++
++	void setRequestDelay(F32 delay)
++	{
++		mRequestDelay = delay;
++	}
++
++	void setMaxPending(U32 count)
++	{
++		mMaxPending = count;
++	}
++private:
++	friend class LLFloaterAvatarList;
++	T mValue;
++
++	DATA_STATUS mStatus;
++
++	
++	/**
++	 * @brief How long to wait before trying to re-request the data
++	 */
++	F32 mRetryDelay;
++
++	/**
++	 * @brief How long to wait on the first attempt to get data
++	 */
++	F32 mFirstRequestTimeout;
++
++	/**
++	 * @brief Maximum delay between retries
++	 *
++	 * On failure, timeout gets doubled until it reaches this value
++	 */
++	F32 mMaxRequestTimeout;
++
++	/**
++	 * @brief Timer for the current request
++	 */
++	LLTimer mRequestTimer;
++
++
++
++	/**
++	 * @brief Timer used to separate requests, to avoid flooding the server
++	 */
++	static LLTimer mRequestDelayTimer;
++
++	/**
++	 * @brief Amount of pending requests
++	 */
++	static U32 mPending;
++
++
++	/**
++	 * @brief Time between requests of the same type
++	 */
++	F32 mRequestDelay;
++
++	/**
++	 * @brief Maximum amount of pending requests
++	 */
++	U32 mMaxPending;
++};
++
++template <class T> LLTimer LLAvatarListDatum<T>::mRequestDelayTimer;
++template <class T> U32 LLAvatarListDatum<T>::mPending = 0;
++
++//template <class T> F32 LLAvatarListDatum<T>::mRequestDelay;
++
++
++
++/**
++ * @brief A TrustNet score
++ */
++struct LLAvListTrustNetScore
++{
++	F32 Score;
++	std::string Type;
++
++	LLAvListTrustNetScore(std::string type = "<uninitialized>", F32 score = 0.0f);
++};
++
++/**
++ * @brief Avatar payment information
++ */
++struct LLAvatarInfo
++{
++	PAYMENT_TYPE Payment;
++	ACCOUNT_TYPE Account;
++	struct tm    BirthDate;
++
++	LLAvatarInfo();
++	LLAvatarInfo(PAYMENT_TYPE payment, ACCOUNT_TYPE account, struct tm birth);
++	S32 getAge();
++};
++
++/**
++ * @brief Misc data about the avatar
++ * This class holds replies from third party databases. There's no fixed format,
++ * and interpretation is left to the end user.
++ */
++struct LLMiscDBInfo
++{
++	std::string data;
++
++	LLMiscDBInfo(std::string d)
++	{
++		data = d;
++	}
++
++	LLMiscDBInfo()
++	{
++		data = "";
++	}
++};
++
++
++/**
++ * @brief This class is used to hold data about avatars.
++ * We cache data about avatars to avoid repeating requests in this class.
++ * Instances are kept in a map<LLAvatarListEntry>. We keep track of the
++ * frame where the avatar was last seen. Avatars that are old enough are
++ * not added to the visible list, but still kept around to cache the account
++ * info data (like the birth date and the payment data)
++ */
++class LLAvatarListEntry {
++public:
++
++
++	/**
++	 * @brief Initializes a list entry
++	 * @param id Avatar's key
++	 * @param name Avatar's name
++	 * @param position Avatar's current position
++	 * @param isLinden TRUE if the avatar is a Linden
++	 * @param isCoarse TRUE if the avatar is only in the coarse location list
++	 * @param regionname if the region is not the same as the current agent region, else empty string
++	 */
++	LLAvatarListEntry(const LLUUID& id = LLUUID::null, const std::string &name = "", const LLVector3d &position = LLVector3d::zero, BOOL isLinden = FALSE, BOOL isCoarse = FALSE, std::string regionname = std::string() ) :
++		mID(id), mName(name), mPosition(position), mMarked(FALSE), mFocused(FALSE), mIsLinden(isLinden), mIsCoarse(isCoarse), mRegionName(regionname), mActivityType(ACTIVITY_NEW), mAccountTitle(""),
++		mUpdateTimer(), mActivityTimer(), mFrame(0)
++	{
++		mTrustNetScore.setRequestDelay(0.1f);
++		mTrustNetScore.setMaxPending(8);
++		mFrame = gFrameCount;
++		mEnteredTimer.start();
++	}
++
++	/**
++	 * Update world position.
++	 * Affects age.
++	 */	
++	void setPosition(LLVector3d position);
++
++	LLVector3d getPosition();
++
++	/**
++	 * @brief Returns the age of this entry in frames
++	 *
++	 * This is only used for determining whether the avatar is still around.
++	 * @see getEntryAgeSeconds
++	 */
++	U32 getEntryAgeFrames();
++
++	/**
++	 * @brief Returns the age of this entry in seconds
++	 */
++	F32 getEntryAgeSeconds();
++
++	/**
++	 * @brief Returns time when avatar entered the list
++	 */
++	F32 getEntryEnteredSeconds();
++
++	/**
++	 * @brief Returns the name of the avatar
++	 */
++	std::string getName();
++
++	void setName(std::string name);
++
++	LLUUID getID();
++
++	void setID(LLUUID id);
++
++	/**
++	 * @brief Whether the avatar is a Linden
++	 */
++	BOOL getIsLinden();
++
++	/**
++	 * @brief whether the avatar entry was taken from the coarse location update
++	 */
++	BOOL getIsCoarse() { return mIsCoarse; }
++
++	/**
++	 * @brief returns the agents region name or "" if same as main agent
++	 */
++	std::string &getRegionName() { return mRegionName; }
++
++	/**
++	 * @brief returns true if agent is on same region
++	 */
++	BOOL getIsSameRegion() { return mRegionName.empty(); }
++
++	/**
++	 * @brief returns reference to the HUDObject-pointer for this avatar if any
++	 */
++	LLPointer<LLHUDObject> &getHudObject() { return mHudObject; }
++
++	/**
++	 * @brief Sets a custom title for the account
++	 * @note Changes account type to ACCOUNT_CUSTOM
++	 */
++	void setAccountCustomTitle(std::string &title);
++
++	/**
++	 * @brief Gets the custom title for the account
++	 */
++	std::string getAccountCustomTitle();
++
++	/**
++	 * @brief Sets the activity type for this avatar
++	 *
++	 * Has no effect if the specified type is lower priority than the
++	 * current one.
++	 */
++	void setActivity(ACTIVITY_TYPE activity);
++
++	/**
++	 * @brief Returns the activity type
++	 */
++	ACTIVITY_TYPE getActivity();
++
++	/**
++	 * @brief Sets the 'focus' status on this entry (camera focused on this avatar)
++	 */
++	void setFocus(BOOL value) { mFocused = value; }
++
++	BOOL isFocused() { return mFocused; }
++
++
++	BOOL isMarked();
++
++	/**
++	 * @brief Returns whether the item is dead and shouldn't appear in the list
++	 * @returns TRUE if dead
++	 */
++	BOOL isDead();
++
++	void toggleMark();
++private:
++	friend class LLFloaterAvatarList;
++
++	LLUUID mID;
++	std::string mName;
++	LLVector3d mPosition;
++	BOOL mMarked;
++	BOOL mFocused;
++	BOOL mIsLinden;
++	BOOL mIsCoarse;
++	std::string mRegionName;
++	LLPointer<LLHUDObject> mHudObject; /* holds the text on screen, if we don't keep this it won't reach a stable position on-screen but gets recreated for each update */
++
++
++	ACTIVITY_TYPE mActivityType;
++
++	std::string mAccountTitle;
++
++	LLAvatarListDatum<LLAvListTrustNetScore> mTrustNetScore;
++	LLAvatarListDatum<LLAvatarInfo>   mAvatarInfo;
++	LLAvatarListDatum<LLMiscDBInfo> mMiscInfo;
++
++	/**
++	 * @brief Timer to keep track of whether avatars are still there
++	 */
++	LLTimer mUpdateTimer;
++
++	/**
++	 * @brief Timer for avatar activities
++	 */
++	LLTimer mActivityTimer;
++
++	/**
++	 * @brief Last frame when this avatar was updated
++	 */
++	U32 mFrame;
++	
++	/**
++	 * @brief Time when avatar entered the list
++	 */
++	LLTimer mEnteredTimer;
++};
++
++
++/**
++ * @brief Avatar List
++ * Implements an avatar scanner in the client.
++ *
++ * This is my first attempt to modify the SL source. This code is intended
++ * to have a dual purpose: doing the task, and providing an example of how
++ * to do it. For that reason, it's going to be commented as exhaustively
++ * as possible.
++ *
++ * Since I'm very new to C++ any suggestions on coding, style, etc are very
++ * welcome.
++ */
++class LLFloaterAvatarList : public LLFloater
++{
++public:
++	/**
++	 * @brief Creates and initializes the LLFloaterAvatarList
++	 * Here the interface is created, and callbacks are initialized.
++	 */
++	LLFloaterAvatarList();
++	~LLFloaterAvatarList();
++
++	void show();
++
++	/**
++	 * @brief Hide when user closes the list.
++	 */
++	virtual void onClose(bool app_quitting) { setVisible(FALSE); }
++
++	/**
++	 * @brief Toggles interface visibility
++	 * There is only one instance of the avatar scanner at any time.
++	 */
++	static void toggle(void*);
++
++	/**
++	 * @brief Returns floater visibility status
++	 */
++	static BOOL visible(void*);
++
++	/**
++	 * @brief Updates the internal avatar list with the currently present avatars.
++	 */
++	void updateAvatarList();
++
++	/**
++	 * @brief Refresh avatar list (display)
++	 */
++	void refreshAvatarList();
++
++	/**
++	 * @brief Process the reply to a request for avatar properties
++	 */
++	static void processAvatarPropertiesReply(LLMessageSystem *msg, void**);
++
++	/**
++	 * @brief Returns TRUE if the avatar is in the list of known avatars
++	 * @returns TRUE if the avatar is in the list
++	 */
++	BOOL avatarIsInList(LLUUID avatar);
++
++	/**
++	 * @brief Returns the entry for an avatar, if preset
++	 * @returns Pointer to avatar entry, NULL if not found.
++	 */
++	LLAvatarListEntry* getAvatarEntry(LLUUID avatar);
++
++	/**
++	 * @brief Requests a TrustNet score from the Adapter
++	 * @param avatar Avatar for which to request the score
++	 * @param name Avatar's name
++	 * @param type Score type ("behavior", etc)
++	 */
++	void requestTrustNetScore(LLUUID avatar, const std::string name, const std::string type);
++
++	/**
++	 * @brief Requests information about the avatar from the database
++	 * @param avatar Avatar about whom we need information
++	 * @param name Avatar's name
++	 */
++	void requestMiscInfo(LLUUID avatar, const std::string name);
++
++	/**
++	 * @brief Handles IM messages to process the ones that are replies to database requests
++	 * @param from_id Key of the avatar sending the message
++	 * @param message Content
++	 * @returns TRUE if the message was handled. This will suppress further processing in llviewermessage.cpp
++	 */
++	static BOOL handleIM(LLUUID from_id, const std::string message);
++
++	/**
++	 * @brief Process a reply from the TrustNet Adapter
++	 * This handles replies from the TrustNet adapter, such as score results.
++	 */
++	static void processTrustNetReply(char *reply);
++
++	/**
++	 * @brief Returns a string with the selected names in the list
++	 */
++	std::string getSelectedNames(const std::string& separator = ", ");
++
++	/** @brief render a debug beacon for the coarse avatars */
++	void renderDebugBeacons();
++
++	/** @brief if avatar beacons shall be rendered */
++	static bool getRenderAvatarBeacons(void *data) { return sRenderAvatarBeacons; }
++
++	/** @brief set if avatar beacons shall be rendered */
++	static void toggleRenderAvatarBeacons(void *data) { sRenderAvatarBeacons = !sRenderAvatarBeacons; }
++
++	/** @brief set if avatar beacons shall be rendered */
++	static void setRenderAvatarBeacons(bool do_render ) { sRenderAvatarBeacons = do_render; }
++
++private:
++	// when a line editor loses keyboard focus, it is committed.
++	// commit callbacks are named onCommitWidgetName by convention.
++	//void onCommitBaz(LLUICtrl* ctrl, void *userdata);
++	
++	enum AVATARS_COLUMN_ORDER
++	{
++		LIST_AVATAR_ICON,
++		LIST_AVATAR_NAME,
++		LIST_DISTANCE,
++		LIST_AGE,
++		/*LIST_SCORE,*/
++		LIST_PAYMENT,
++		LIST_ACTIVITY,
++		LIST_ENTERED,
++	};
++
++	typedef void (*avlist_command_t)(const LLUUID &avatar, const std::string &name);
++
++	void speakText(S32 channel, EChatType type, std::string text);
++
++	/**
++	 * @brief Removes focus status from all avatars in list
++	 */
++	void removeFocusFromAll();
++
++	/**
++	 * @brief Focus camera on previous avatar
++	 * @param marked_only Whether to choose only marked avatars
++	 */
++	void focusOnPrev(BOOL marked_only);
++
++	/**
++	 * @brief Focus camera on next avatar
++	 * @param marked_only Whether to choose only marked avatars
++	 */
++	void focusOnNext(BOOL marked_only);
++
++	/**
++	 * @brief Updates the internal avatar list from the coarse location list if not already present
++	 */
++	void updateFromCoarse();
++
++	/**
++	 * @brief Purge hud object map from entries no longer in the list
++	 */
++	void purgeAvatarHUDMap();
++
++	/**
++	 * @brief Handler for the "refresh" button click.
++	 * I am unsure whether this is actually necessary at the time.
++	 *
++	 * LL: By convention, button callbacks are named onClickButtonLabel
++	 * @param userdata Pointer to user data (LLFloaterAvatarList instance)
++	 */
++	//static void onClickRefresh(void* userdata);
++
++	static void onClickProfile(void *userdata);
++	static void onClickIM(void *userdata);
++	static void onClickTrack(void *userdata);
++	static void onClickMark(void *userdata);
++
++	static void onClickGohomerMark(void *userdata);
++	static void onClickGohomerWarn(void *userdata);
++	static void onClickGohomerEject(void *userdata);
++	static void onClickGohomerSendAway(void *userdata);
++	static void onClickGohomerSendHome(void *userdata);
++	static void onClickGohomerSendHomeByKey(void *userdata);
++
++	static void onClickGohomerOff(void *userdata);
++
++
++	static void onClickPrevInList(void *userdata);
++	static void onClickNextInList(void *userdata);
++	static void onClickPrevMarked(void *userdata);
++	static void onClickNextMarked(void *userdata);
++	static void onClickGetKey(void *userdata);
++
++	static void onClickTrustNetRate(void *userdata);
++	static void onClickTrustNetExplain(void *userdata);
++	static void onClickTrustNetWebsite(void *userdata);
++	static void onClickTrustNetGetPassword(void *userdata);
++	static void onClickTrustNetRenew(void *userdata);
++
++	static void onDoubleClick(void *userdata);
++
++	static void onClickFreeze(void *userdata);
++	static void onClickEject(void *userdata);
++//	static void onClickBan(void *userdata);
++//	static void onClickUnban(void *userdata);
++	static void onClickMute(void *userdata);
++//	static void onClickUnmute(void *userdata);
++	static void onClickAR(void *userdata);
++	static void onClickTeleport(void *userdata);
++	static void onClickEjectFromEstate(void *userdata);
++
++	static void callbackFreeze(S32 option, void *userdata);
++//	static void callbackUnfreeze(S32 option, void *userdata);
++	static void callbackEject(S32 option, void *userdata);
++//	static void callbackBan(S32 option, void *userdata);
++	static void callbackMute(S32 option, void *userdata);
++//	static void callbackUnmute(void *userdata);
++	static void callbackAR(void *userdata);
++	static void callbackEjectFromEstate(S32 option, void *userdata);
++
++	void doCommand(avlist_command_t cmd);
++
++	/**
++	 * @brief Cleanup avatar list, removing dead entries from it.
++	 * This lets dead entries remain for some time. This makes it possible
++	 * to keep people passing by in the list long enough that it's possible
++	 * to do something to them.
++	 */
++	void expireAvatarList();
++
++	/**
++	 * @brief Perform a Luskwood Gohomer command on the selected users
++	 * @param cmd Command (for example "gowarn")
++	 */
++	void luskwoodCommand(std::string cmd);
++
++	/**
++	 * @brief Handle the results of a gohomer confirmation dialog
++	 * @param option Option selected (0=ok, 1=cancel)
++	 * @param data this
++	 */
++	static void handleLuskwoodDialog(S32 option, void* data);
++
++	/**
++	 * @brief Handle the results of a gohomer turn off dialog
++	 * @param option Option selected (0=ok, 1=cancel)
++	 * @param data this
++	 */
++	static void handleLuskwoodGohomerOffDialog(S32 option, void* data);
++
++	/**
++	 * @brief Process the AR queue
++	 * This generates AR reports for the queued avatars
++	 */
++	void processARQueue();
++		
++private:
++	/**
++	 * @brief Pointer to the avatar scroll list
++	 */
++	LLScrollListCtrl*			mAvatarList;
++	std::map<LLUUID, LLAvatarListEntry>	mAvatars;
++
++	/**
++	 * @brief Queue of abuse reports
++	 */
++	std::queue<LLUUID> mARQueue;
++
++	/**
++	 * @brief List of AR screens opened
++	 * We don't open them on creation to capture a clean screenshot. They're
++	 * opened only after finishing the process.
++	 */
++	std::queue<LLFloaterReporter*> mARReporterQueue;
++
++	/**
++	 * @brief Last time during which an AR was submitted
++	 * Used to give the camera some time to move between avatars. Perhaps this way
++	 * of doing things isn't ideal, though.
++	 */
++	S32 mARLastFrame;
++	
++	
++	/**
++	 * @brief Request information about the specified avatar
++	 * @param avid Avatar id to request info about
++	 */
++	void sendAvatarPropertiesRequest(LLUUID avid);
++
++	void checkTrackingStatus();
++
++	/**
++	 * @brief Returns the color for the specified avatar entry
++	 * @param ent Avatar entry
++	 * @param distance Distance from the user
++	 */
++	//LLColor4 getAvatarColor(LLAvatarListEntry *ent, F32 distance);
++	LLColor4 getAvatarColor(LLAvatarListEntry *ent, F32 distance, e_coloring_type type);
++
++	/**
++	 * @brief Replace variables in string
++	 * @param str String to replace variables in
++	 * @param avatar Value for $KEY
++	 * @param name Value for $NAME
++	 */
++	static void replaceVars(std::string &str, LLUUID avatar, const std::string& name);
++
++	// tracking data
++	BOOL mTracking;             // tracking?
++	BOOL mTrackByLocation;      // TRUE if tracking by known position, FALSE for tracking a friend
++	LLUUID mTrackedAvatar;     // who we're tracking
++
++	/**
++	 * @brief Used to delay avatar data requests
++	 */
++	LLTimer mDataRequestTimer;
++
++	/**
++	 * @brief Used to delay trustnet requests
++	 */
++	LLTimer mTrustNetTimer;
++
++	/**
++	 * @brief Luskwood command to execute
++	 */
++	std::string mLuskwoodCommand;
++
++	/**
++	 * @brief Avatar the camera is focused on
++	 */
++	LLUUID mFocusedAvatar;
++
++	/** @brief holds state of avatar beacon render setup */
++	static bool sRenderAvatarBeacons;
++
++
++	std::map< LLUUID, LLPointer<LLHUDObject> > mHudObjectMap;
++};
++
++/**
++ * Pointer to global LLFloaterAvatarList instance.
++ * This is initialized in llviewerwindow.cpp
++ * @see llviewerwindow.cpp
++ */
++extern LLFloaterAvatarList* gFloaterAvatarList;
+diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
+index b907aed..b45f549 100644
+--- a/indra/newview/llfloaterpreference.cpp
++++ b/indra/newview/llfloaterpreference.cpp
+@@ -60,6 +60,7 @@
+ #include "llpanelLCD.h"
+ #include "llpanelmsgs.h"
+ #include "llpanelweb.h"
++#include "llpaneldatabase.h"
+ #include "llpanelskins.h"
+ #include "llprefschat.h"
+ #include "llprefsvoice.h"
+@@ -190,6 +191,10 @@ LLPreferenceCore::LLPreferenceCore(LLTabContainer* tab_container, LLButton * def
+ 	mTabContainer->addTabPanel(mSkinsPanel, mSkinsPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
+ 	mSkinsPanel->setDefaultBtn(default_btn);
+ 
++	mDBPanel = new LLPanelDatabase();
++	mTabContainer->addTabPanel(mDBPanel, mDBPanel->getLabel(), FALSE, onTabChanged, mTabContainer);
++	mDBPanel->setDefaultBtn(default_btn);
++
+ 	if (!mTabContainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
+ 	{
+ 		mTabContainer->selectFirstTab();
+@@ -269,6 +274,7 @@ void LLPreferenceCore::apply()
+ 	LLFloaterHardwareSettings::instance()->apply();
+ 
+ 	mWebPanel->apply();
++	mDBPanel->apply();
+ #if LL_LCD_COMPILE
+ 	// only add this option if we actually have a logitech keyboard / speaker set
+ 	if (gLcdScreen->Enabled())
+@@ -297,6 +303,7 @@ void LLPreferenceCore::cancel()
+ 	LLFloaterHardwareSettings::instance()->cancel();
+ 
+ 	mWebPanel->cancel();
++	mDBPanel->cancel();
+ #if LL_LCD_COMPILE
+ 	// only add this option if we actually have a logitech keyboard / speaker set
+ 	if (gLcdScreen->Enabled())
+diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
+index 2a19f26..c7a2df9 100644
+--- a/indra/newview/llfloaterpreference.h
++++ b/indra/newview/llfloaterpreference.h
+@@ -49,6 +49,7 @@ class LLPanelAudioPrefs;
+ class LLPanelDebug;
+ class LLPanelNetwork;
+ class LLPanelWeb;
++class LLPanelDatabase;
+ class LLMessageSystem;
+ class LLPrefsChat;
+ class LLPrefsVoice;
+@@ -91,6 +92,7 @@ private:
+ 	LLPanelWeb				*mWebPanel;
+ 	LLPanelMsgs				*mMsgPanel;
+ 	LLPanelLCD				*mLCDPanel;
++	LLPanelDatabase				*mDBPanel;
+ };
+ 
+ // Floater to control preferences (display, audio, bandwidth, general.
+diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
+index e8643c0..43f5892 100644
+--- a/indra/newview/llfloaterreporter.cpp
++++ b/indra/newview/llfloaterreporter.cpp
+@@ -540,7 +540,7 @@ void LLFloaterReporter::showFromMenu(EReportType report_type)
+ 
+ 
+ // static
+-void LLFloaterReporter::showFromObject(const LLUUID& object_id)
++LLFloaterReporter* LLFloaterReporter::showFromObject(const LLUUID& object_id, bool show)
+ {
+ 	LLFloaterReporter* f = createNewAbuseReporter();
+ 	f->center();
+@@ -557,7 +557,16 @@ void LLFloaterReporter::showFromObject(const LLUUID& object_id)
+ 	// Need to deselect on close
+ 	f->mDeselectOnClose = TRUE;
+ 
+-	f->open();		/* Flawfinder: ignore */
++	if ( show )
++	{
++		f->open();		/* Flawfinder: ignore */
++	}
++	else
++	{
++		gDialogVisible = FALSE;
++	}
++
++	return f;
+ }
+ 
+ 
+diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
+index 921f9a1..2c6f679 100644
+--- a/indra/newview/llfloaterreporter.h
++++ b/indra/newview/llfloaterreporter.h
+@@ -92,7 +92,7 @@ public:
+ 	// Enables all buttons
+ 	static void showFromMenu(EReportType report_type);
+ 
+-	static void showFromObject(const LLUUID& object_id);
++	static LLFloaterReporter* showFromObject(const LLUUID& object_id, bool show = true);
+ 
+ 	static void onClickSend			(void *userdata);
+ 	static void onClickCancel		(void *userdata);
+diff --git a/indra/newview/llpaneldatabase.cpp b/indra/newview/llpaneldatabase.cpp
+new file mode 100644
+index 0000000..f510130
+--- /dev/null
++++ b/indra/newview/llpaneldatabase.cpp
+@@ -0,0 +1,149 @@
++/** 
++ * @file llpaneldatabase.cpp
++ * @brief Database preferences panel
++ * @author Dale Glass
++ *
++ * Copyright (c) 2003-2007, Linden Research, Inc.
++ * 
++ * 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.
++ */
++
++#include "llviewerprecompiledheaders.h"
++
++#include "llpaneldatabase.h"
++
++#include "llscrolllistctrl.h"
++#include "llviewerwindow.h"
++#include "llviewercontrol.h"
++#include "lluictrlfactory.h"
++#include "llfloateravatarpicker.h"
++#include "llagentdata.h"
++#include "llnotify.h"
++
++//-----------------------------------------------------------------------------
++LLPanelDatabase::LLPanelDatabase() :
++	LLPanel("Messages Panel")
++{
++	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_database.xml");
++	childSetAction("change_avatar_btn", onClickChangeAvatar, this);
++};
++
++//-----------------------------------------------------------------------------
++// postBuild()
++//-----------------------------------------------------------------------------
++
++void LLPanelDatabase::refresh() 
++{
++	llinfos << "Loading settings" << llendl;
++	//mAvatarName      = gSavedPerAccountSettings.getString("DBAvatarName");
++	//mAvatarKey.set(gSavedPerAccountSettings.getString("DBAvatarKey"));
++	//mURL             = gSavedSettings.getString("DBURL");;
++	//mUsername        = gSavedSettings.getString("DBURLUsername");;
++	//mPassword        = gSavedSettings.getString("DBURLPassword");;
++	//mSendPattern     = gSavedSettings.getString("DBSendPattern");;
++	//mPositivePattern = gSavedSettings.getString("DBPositivePattern");;
++	//mNegativePattern = gSavedSettings.getString("DBNegativePattern");;
++	//mDeniedPattern   = gSavedSettings.getString("DBDeniedPattern");;
++
++}
++
++BOOL LLPanelDatabase::postBuild()
++{
++	refresh();
++
++	llinfos << "Setting settings in window" << llendl;
++	childSetText("db_avatar"       ,mAvatarName );
++	childSetText("db_url"          ,mURL );
++	childSetText("db_url_username" ,mUsername );
++	childSetText("db_url_password" ,mPassword );
++	childSetText("send_pattern"    ,mSendPattern );
++	childSetText("positive_pattern",mPositivePattern );
++	childSetText("negative_pattern",mNegativePattern );
++	childSetText("denied_pattern"  ,mDeniedPattern );
++
++	return TRUE;
++}
++
++
++void LLPanelDatabase::draw()
++{
++	LLPanel::draw();
++}
++
++void LLPanelDatabase::apply()
++{
++	//llinfos << "Saving settings" << llendl;
++
++	//gSavedPerAccountSettings.setString("DBAvatarName", childGetText("db_avatar").c_str());
++	//gSavedPerAccountSettings.setString("DBAvatarKey", mAvatarKey.asString());
++	//gSavedSettings.setString("DBURL", childGetText("db_url").c_str());
++	//gSavedSettings.setString("DBURLUsername", childGetText("db_url_username").c_str());
++	//gSavedSettings.setString("DBURLPassword", childGetText("db_url_password").c_str());
++
++	//gSavedSettings.setString("DBSendPattern", childGetText("send_pattern").c_str());
++	//gSavedSettings.setString("DBPositivePattern", childGetText("positive_pattern").c_str());
++	//gSavedSettings.setString("DBNegativePattern", childGetText("negative_pattern").c_str());
++	//gSavedSettings.setString("DBDeniedPattern", childGetText("denied_pattern").c_str());	
++
++
++}
++
++void LLPanelDatabase::cancel()
++{
++	
++}
++
++//static
++void LLPanelDatabase::onClickChangeAvatar(void *userdata)
++{
++	LLFloaterAvatarPicker::show(onPickAvatar, userdata, FALSE, TRUE);
++}
++
++//static
++void LLPanelDatabase::onPickAvatar(const std::vector<std::string>& names,
++                                   const std::vector<LLUUID>& ids,
++                                   void* user_data)
++{
++	if (names.empty()) return;
++	if (ids.empty()) return;
++
++	LLPanelDatabase *self = (LLPanelDatabase*)user_data;
++
++#ifndef LL_DEBUG
++	// TODO: LL_DEBUG isn't the right one, what is it?
++	//
++	// Using yourself as the database avatar should work, and be useful
++	// for debugging, but it's not something a normal user should be able
++	// to do.
++	
++//	if(ids[0] == gAgentID)
++//	{
++//		LLNotifyBox::showXml("AddSelfDatabase");
++//		return;
++//	}
++#endif
++
++	self->childSetText("db_avatar", names[0]);
++	self->mAvatarName = names[0];
++	self->mAvatarKey = ids[0];
++}
++
++
+diff --git a/indra/newview/llpaneldatabase.h b/indra/newview/llpaneldatabase.h
+new file mode 100644
+index 0000000..e08a453
+--- /dev/null
++++ b/indra/newview/llpaneldatabase.h
+@@ -0,0 +1,65 @@
++/** 
++ * @file llprefschat.h
++ * @brief Database preferences panel
++ *
++ * Copyright (c) 2003-2007, Linden Research, Inc.
++ * 
++ * 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.
++ */
++
++#ifndef LLPREFSDB_H
++#define LLPREFSDB_H
++
++#include "llpanel.h"
++
++class LLPanelDatabase : public LLPanel
++{
++public:
++	LLPanelDatabase();
++	virtual ~LLPanelDatabase() {};
++
++	virtual BOOL postBuild();
++	virtual void draw();
++	virtual void refresh();
++
++	void apply();
++	void cancel();
++
++	static void onClickChangeAvatar(void *userdata);
++	static void onPickAvatar(const std::vector<std::string>& names,
++                                 const std::vector<LLUUID>& ids,
++                                 void* user_data);
++
++protected:
++	std::string mAvatarName;
++	LLUUID   mAvatarKey;
++	std::string mURL;
++	std::string mUsername;
++	std::string mPassword;
++	std::string mSendPattern;
++	std::string mPositivePattern;
++	std::string mNegativePattern;
++	std::string mDeniedPattern;
++
++};
++
++
++#endif // LL_PREFSDB_H
+diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
+index 2ce111f..12ed7a0 100644
+--- a/indra/newview/llstartup.cpp
++++ b/indra/newview/llstartup.cpp
+@@ -3004,7 +3004,7 @@ void register_viewer_callbacks(LLMessageSystem* msg)
+ 	msg->setHandlerFunc("ParcelDwellReply",
+ 		LLViewerParcelMgr::processParcelDwellReply);
+ 
+-	msg->setHandlerFunc("AvatarPropertiesReply",
++	msg->addHandlerFunc("AvatarPropertiesReply",
+ 						LLPanelAvatar::processAvatarPropertiesReply);
+ 	msg->setHandlerFunc("AvatarInterestsReply",
+ 						LLPanelAvatar::processAvatarInterestsReply);
+diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp
+index 98ad5ff..f0077d0 100644
+--- a/indra/newview/lltoolbar.cpp
++++ b/indra/newview/lltoolbar.cpp
+@@ -49,6 +49,7 @@
+ #include "llvoavatar.h"
+ #include "lltooldraganddrop.h"
+ #include "llinventoryview.h"
++#include "llfloateravatarlist.h"
+ #include "llfloaterchatterbox.h"
+ #include "llfloaterfriends.h"
+ #include "llfloatersnapshot.h"
+@@ -154,6 +155,9 @@ BOOL LLToolBar::postBuild()
+ 	childSetAction("inventory_btn", onClickInventory, this);
+ 	childSetControlName("inventory_btn", "ShowInventory");
+ 
++	childSetAction("avatar_list_btn", onClickAvatarList, this);
++	childSetControlName("inventory_btn", "ShowAvatarList");
++
+ 	for (child_list_const_iter_t child_iter = getChildList()->begin();
+ 		 child_iter != getChildList()->end(); ++child_iter)
+ 	{
+@@ -527,3 +531,8 @@ void LLToolBar::onClickInventory(void*)
+ 	handle_inventory(NULL);
+ }
+ 
++// static
++void LLToolBar::onClickAvatarList(void*)
++{
++	LLFloaterAvatarList::toggle(NULL);
++}
+diff --git a/indra/newview/lltoolbar.h b/indra/newview/lltoolbar.h
+index be0e1b4..e738e1a 100644
+--- a/indra/newview/lltoolbar.h
++++ b/indra/newview/lltoolbar.h
+@@ -82,6 +82,7 @@ public:
+ 	static void onClickRadar(void* data);
+ 	static void onClickMap(void* data);
+ 	static void onClickInventory(void* data);
++	static void onClickAvatarList(void* data);
+ 
+ 	static F32 sInventoryAutoOpenTime;
+ 
+diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
+index 9782d4b..1182f10 100644
+--- a/indra/newview/llviewermenu.cpp
++++ b/indra/newview/llviewermenu.cpp
+@@ -201,6 +201,7 @@
+ #include "pipeline.h"
+ #include "llappviewer.h"
+ #include "roles_constants.h"
++#include "llfloateravatarlist.h"
+ #include "llviewerjoystick.h"
+ #include "llwlanimator.h"
+ #include "llwlparammanager.h"
+@@ -5269,6 +5270,10 @@ class LLShowFloater : public view_listener_t
+ 		{
+ 			LLFloaterAbout::show(NULL);
+ 		}
++		else if (floater_name == "avatar list")
++		{
++			LLFloaterAvatarList::toggle(NULL);
++		}
+ 		else if (floater_name == "active speakers")
+ 		{
+ 			LLFloaterActiveSpeakers::toggleInstance(LLSD());
+@@ -7401,6 +7406,15 @@ static void addMenu(view_listener_t *menu, const std::string& name)
+ 	menu->registerListener(gMenuHolder, name);
+ }
+ 
++class LLViewAvatarList : public view_listener_t
++{
++	bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
++	{
++		llinfos << "LLViewAvatarList::handleEvent()" << llendl;
++		return true;
++	}
++};
++
+ void initialize_menus()
+ {
+ 	// File menu
+diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
+index 30e5e26..2715c26 100644
+--- a/indra/newview/llviewermessage.cpp
++++ b/indra/newview/llviewermessage.cpp
+@@ -135,6 +135,9 @@
+ #include "llviewerdisplay.h"
+ #include "llkeythrottle.h"
+ 
++#include "llpanelavatar.h"
++#include "llfloateravatarlist.h"
++
+ #include <boost/tokenizer.hpp>
+ 
+ #if LL_WINDOWS // For Windows specific error handler
+diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
+index 5827dc2..bc877ba 100644
+--- a/indra/newview/llviewerobject.h
++++ b/indra/newview/llviewerobject.h
+@@ -598,8 +598,9 @@ protected:
+ 	TPACKETID		mLatestRecvPacketID;			// Latest time stamp on message from simulator
+ 	// extra data sent from the sim...currently only used for tree species info
+ 	U8* mData;
+-
++public:
+ 	LLPointer<LLViewerPartSourceScript>		mPartSourcep;	// Particle source associated with this object.
++protected:
+ 	LLAudioSourceVO* mAudioSourcep;
+ 	F32				mAudioGain;
+ 	
+diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
+index 106ad08..ec9d884 100644
+--- a/indra/newview/llviewerwindow.cpp
++++ b/indra/newview/llviewerwindow.cpp
+@@ -106,6 +106,7 @@
+ #include "llfloatersnapshot.h"
+ #include "llfloatertools.h"
+ #include "llfloaterworldmap.h"
++#include "llfloateravatarlist.h"
+ #include "llfocusmgr.h"
+ #include "llframestatview.h"
+ #include "llgesturemgr.h"
+@@ -1865,9 +1866,14 @@ void LLViewerWindow::initWorldUI()
+ 		gMorphView->setVisible(FALSE);
+ 
+ 		// *Note: this is where gFloaterMute used to be initialized.
+-
++		gFloaterAvatarList = NULL;
+ 		LLWorldMapView::initClass();
+ 
++		gFloaterAvatarList = new LLFloaterAvatarList();
++		gFloaterAvatarList->setVisible(FALSE);
++
++		LLWorldMapView::initClass();
++		
+ 		adjust_rect_centered_partial_zoom("FloaterWorldMapRect2", full_window);
+ 
+ 		gFloaterWorldMap = new LLFloaterWorldMap();
+diff --git a/indra/newview/llwebbrowserctrl.h b/indra/newview/llwebbrowserctrl.h
+index 8a31421..0400745 100644
+--- a/indra/newview/llwebbrowserctrl.h
++++ b/indra/newview/llwebbrowserctrl.h
+@@ -32,6 +32,8 @@
+ #ifndef LL_LLWEBBROWSERCTRL_H
+ #define LL_LLWEBBROWSERCTRL_H
+ 
++#include "lluictrlfactory.h"
++
+ ////////////////////////////////////////////////////////////////////////////////
+ // data class that is passed with an event
+ class LLWebBrowserCtrlEvent
+diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
+index 81f1a90..6e686cd 100644
+--- a/indra/newview/pipeline.cpp
++++ b/indra/newview/pipeline.cpp
+@@ -78,6 +78,7 @@
+ #include "llviewerimagelist.h"
+ #include "llviewerobject.h"
+ #include "llviewerobjectlist.h"
++#include "llviewerpartsource.h"
+ #include "llviewerparcelmgr.h"
+ #include "llviewerregion.h" // for audio debugging.
+ #include "llviewerwindow.h" // For getSpinAxis
+@@ -92,6 +93,7 @@
+ #include "llvopartgroup.h"
+ #include "llworld.h"
+ #include "llcubemap.h"
++#include "llfloateravatarlist.h"
+ #include "lldebugmessagebox.h"
+ #include "llviewershadermgr.h"
+ #include "llviewerjoystick.h"
+@@ -2008,6 +2010,27 @@ void renderSoundHighlights(LLDrawable* drawablep)
+ 	}
+ }
+ 
++/**
++ * @brief Add particle sources to avatar list
++ * This tells the avatar list floater who is emitting particles
++ */
++void addParticleSourcesToList(LLDrawable *drawablep)
++{
++	if ( NULL != gFloaterAvatarList )
++	{
++		LLViewerObject *vobj = drawablep->getVObj();
++		if (vobj && vobj->isParticleSource())
++		{
++			LLUUID id = vobj->mPartSourcep->getOwnerUUID();
++			LLAvatarListEntry *ent = gFloaterAvatarList->getAvatarEntry(id);
++			if ( NULL != ent )
++			{
++				ent->setActivity(ACTIVITY_PARTICLES);
++			}
++		}
++	}
++}
++
+ void LLPipeline::postSort(LLCamera& camera)
+ {
+ 	LLMemType mt(LLMemType::MTYPE_PIPELINE);
+@@ -2108,6 +2131,8 @@ void LLPipeline::postSort(LLCamera& camera)
+ 		std::sort(sCull->beginAlphaGroups(), sCull->endAlphaGroups(), LLSpatialGroup::CompareDepthGreater());
+ 	}
+ 
++	forAllVisibleDrawables(addParticleSourcesToList);
++
+ 	// only render if the flag is set. The flag is only set if we are in edit mode or the toggle is set in the menus
+ 	if (gSavedSettings.getBOOL("BeaconAlwaysOn"))
+ 	{
+@@ -2156,6 +2181,23 @@ void LLPipeline::postSort(LLCamera& camera)
+ 		}
+ 	}
+ 
++	// Avatar list support
++	if ( gFloaterAvatarList && gAudiop )
++	{
++		LLAudioEngine::source_map::iterator iter;
++		for (iter = gAudiop->mAllSources.begin(); iter != gAudiop->mAllSources.end(); ++iter)
++		{
++			LLAudioSource *sourcep = iter->second;
++			LLUUID uuid = sourcep->getOwnerID();
++			LLAvatarListEntry *ent = gFloaterAvatarList->getAvatarEntry(uuid);
++
++			if ( ent )
++			{
++				ent->setActivity(ACTIVITY_SOUND);
++			}
++		}
++	}
++
+ 	// If managing your telehub, draw beacons at telehub and currently selected spawnpoint.
+ 	if (LLFloaterTelehub::renderBeacons())
+ 	{
+diff --git a/indra/newview/skins/default/xui/en-us/alerts.xml b/indra/newview/skins/default/xui/en-us/alerts.xml
+index 44b9141..7d1ede3 100644
+--- a/indra/newview/skins/default/xui/en-us/alerts.xml
++++ b/indra/newview/skins/default/xui/en-us/alerts.xml
+@@ -1374,6 +1374,23 @@ chat, or interact with the world.
+ 			Cancel
+ 		</option>
+ 	</alert>
++	<alert modal="true" name="AvatarListFreezeAvatars">
++		<message name="message">
++			Freeze these avatars?
++			[NAMES]
++			They will temporarily be unable to move,
++			chat, or interact with the world.
++		</message>
++		<option name="Freeze">
++			Freeze
++		</option>
++		<option name="Unfreeze">
++			Unfreeze
++		</option>
++		<option name="Cancel">
++			Cancel
++		</option>
++	</alert>	
+ 	<alert modal="true" name="EjectAvatar">
+ 		<message name="message">
+ 			Eject this avatar from your land?
+@@ -1402,6 +1419,53 @@ chat, or interact with the world.
+ 			Cancel
+ 		</option>
+ 	</alert>
++	<alert modal="true" name="AvatarListEjectAvatars">
++		<message name="message">
++			Eject these avatars from your land?
++			[NAMES]
++		</message>
++		<option name="Eject">
++			Eject
++		</option>
++		<option name="EjectandBan">
++			Eject and Ban
++		</option>
++		<option name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	<alert modal="true" name="AvatarListEjectAvatarsFromEstate">
++		<message name="message">
++			Eject these avatars from this estate?
++			[NAMES]
++		</message>
++		<option name="Eject">
++			Eject
++		</option>
++		<option name="EjectandBan">
++			Eject and Ban
++		</option>
++		<option name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	
++	<alert modal="true" name="AvatarListMuteAvatars">
++		<message name="message">
++			Mute these avatars?
++			[NAMES]
++		</message>
++		<option name="Mute">
++			Mute
++		</option>
++		<option name="Unmute">
++			Unmute
++		</option>		
++		<option name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	
+ 	<alert modal="true" name="InvalidUUID">
+ 		<message name="message">
+ 			Not a valid UUID.
+@@ -4903,6 +4967,78 @@ they are part of an attachment.
+ 			No
+ 		</option>
+ 	</alert>
++	<!-- Luskwood functionality -->
++	<alert modal="true" name="LuskwoodGohomerWarn">
++		<message name="message">
++			Warn this avatar?
++			
++			This will show them a dialog asking to confirm that they understand
++			their behavior was found to be undesirable, and that they face
++			ejection or banning if it continues.
++		</message>
++		<option name="Warn">
++			Warn
++		</option>
++		<option default="true" name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	<alert modal="true" name="LuskwoodGohomerEject">
++		<message name="message">
++			Eject this avatar?
++			
++			This avatar will be ejected from the area, but will be able to
++			return immediately.
++		</message>
++		<option name="Eject">
++			Eject
++		</option>
++		<option default="true" name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	<alert modal="true" name="LuskwoodGohomerKeepAway">
++		<message name="message">
++			Eject this avatar and ban them for 2 hours?
++			
++			This avatar will be ejected from the area, and will be added to
++			the parcel's ban list for 2 hours.
++		</message>
++		<option name="KeepAway">
++			Keep Away
++		</option>
++		<option default="true" name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	<alert modal="true" name="LuskwoodGohomerSendHome">
++		<message name="message">
++			Send this avatar home and ban them for 4 hours?
++			
++			This avatar will be sent home, and will be added to the parcel's
++			ban list for 4 hours.
++		</message>
++		<option name="KeepAway">
++			Send Home
++		</option>
++		<option default="true" name="Cancel">
++			Cancel
++		</option>
++	</alert>
++	<alert modal="true" name="LuskwoodGohomerOff">
++		<message name="message">
++			Turn off the gohomer?
++			
++			This will make it stop trying to send the last ejected avatar home,
++			but won't remove them from the ban list.
++		</message>
++		<option name="TurnOff">
++			Turn Off
++		</option>
++		<option default="true" name="Cancel">
++			Cancel
++		</option>
++	</alert>	
+ 	<alert modal="true" name="BadURL">
+ 		<message name="message">
+ 			Second Life doesn&apos;t know how to handle the link:
+diff --git a/indra/newview/skins/default/xui/en-us/floater_avatar_scanner.xml b/indra/newview/skins/default/xui/en-us/floater_avatar_scanner.xml
+new file mode 100644
+index 0000000..7156aa4
+--- /dev/null
++++ b/indra/newview/skins/default/xui/en-us/floater_avatar_scanner.xml
+@@ -0,0 +1,413 @@
++<?xml version="1.0" encoding="utf-8" standalone="yes"?>
++<floater
++	name="avatar list"
++	title="Avatar List"
++	can_resize="true"
++	can_minimize="true"
++	can_close="true"
++	can_drag_on_left="false"
++	rect_control="FloaterAvatarListRect"
++	min_width="400"
++	min_height="300"
++	>
++	<!-- <text
++		  name="help_label"
++		  bottom="-30"
++		  left="15"
++		  font="SansSerifSmall"
++		  follows="top|left"
++		  >
++	</text> -->
++	
++	<scroll_list
++		    name="avatar_list"
++		    left="10"
++		    right="-10"
++		    top="-20"
++		    bottom="150"
++		    column_padding="0"
++		    can_resize="true"
++		    follows="left|top|bottom|right"
++		    draw_heading="true"
++		    multi_select="true"
++		    search_column="1"
++		    tool_tip="Hold shift or control while clicking to select multiple avatars"
++		    >
++		<!-- Icons relating to the avatar, currently: tracking, and marked -->
++		<column name="avatar_icon" label="Icon" width="20" />
++		<column name="avatar_name" label="Name" dynamicwidth="true" />
++		<column name="distance" label="Distance" width="70"/>
++		<column name="age" label="Age" width="50"/>
++		<!-- <column name="payment_data" label="Payment" width="80"/> -->
++		<!-- TrustNet Score -->
++		<!-- <column name="score" label="Score" width="10"/> -->
++		<!-- Payment data icons -->
++		<column name="payment_data" label="" width="20" />
++		<!-- What the avatar is doing: producing sounds, rezzing, particles, etc -->
++		<column name="activity" label="" width="20" />
++		<!-- Time when avatar entered -->
++		<column name="entered" label="Entered" width="60"/>
++	</scroll_list>
++<!--	<panel 
++	       name="scanner_options"
++	       left="10"
++	       right="-10"	
++	       height="45"
++	       bottom="140"	
++	       border="true"
++	       mouse_opaque="true"
++	       bevel_style="in"
++	       background_visible="true"
++	       background_opaque="true"
++	       follows="left|right|bottom"
++	       bg_opaque_color="0,0,0,0.3"
++	       bg_alpha_color="blue"
++	       can_resize="false"
++	>
++	
++	</panel> -->
++	
++	<tab_container border="false" bottom_delta="-130" height="120" left="10" mouse_opaque="false"
++		       name="actions_tab_container" tab_position="top" follows="left|right|bottom">
++		<panel border="true" bottom_delta="-130" follows="left|top|right|bottom" height="255"
++		       label="Avatar" left="1" mouse_opaque="true"
++		     name="actions_tab" width="398">
++			<!-- upper row -->
++			<button
++			       name="profile_btn"
++			       label="Profile"
++			       tool_tip="Show picture, groups, and other information"
++			       left="10"
++			       bottom_delta="-190"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="im_btn"
++			       label="IM"
++			       tool_tip="Open Instant Message session"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			
++
++			<!--middle row -->
++			<button
++			       name="track_btn"
++			       label="Track"
++			       tool_tip="Track this avatar's position"
++			       left="10"
++			       bottom_delta="-24"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="mark_btn"
++			       label="Mark"
++			       tool_tip="Mark this avatar in the list"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="get_key_btn"
++			       label="Get Key"
++			       tool_tip="Copies avatar's key to the clipboard"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="teleport_btn"
++			       label="Teleport"
++			       tool_tip="Teleport to avatar's position"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />			
++			<!-- lower row-->
++			<button
++			       name="prev_in_list_btn"
++			       label="Prev"
++			       tool_tip="Focus camera on previous avatar in list"
++			       left="10"
++			       bottom_delta="-24"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="next_in_list_btn"
++			       label="Next"
++			       tool_tip="Focus camera on next avatar in list"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="prev_marked_btn"
++			       label="Prev Marked"
++			       tool_tip="Focus camera on previous marked avatar"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="next_marked_btn"
++			       label="Next Marked"
++			       tool_tip="Focus camera on next marked avatar"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++
++		</panel>
++		<panel border="true" bottom_delta="-130" follows="left|top|right|bottom" height="255"
++		       label="Moderation" left="1" mouse_opaque="true"
++		       name="land_tab" width="398">
++			
++			<!-- Upper row -->
++			<button
++			       name="freeze_btn"
++			       label="Freeze"
++			       tool_tip="Freeze the avatar, preventing it from moving"
++			       left="10"
++			       bottom_delta="-190"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="eject_btn"
++			       label="Eject"
++			       tool_tip="Eject the avatar from the parcel"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			
++			<button
++			       name="mute_btn"
++			       label="Mute"
++			       tool_tip="Mute this avatar"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			
++
++			<button
++			       name="ar_btn"
++			       label="AR"
++			       tool_tip="Report abuse on this avatar"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++
++			<!-- middle row -->
++			<button
++			       name="estate_eject_btn"
++			       label="Eject from estate"
++			       tool_tip="Eject this avatar from the estate"
++			       left="10"
++			       bottom_delta="-24"
++			       width="170"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++		</panel>
++		
++		<panel border="true" bottom_delta="-130" follows="left|top|right|bottom" height="255"
++		       label="TrustNet" left="1" mouse_opaque="true"
++		       name="trustnet_tab" width="398">
++			<!--TrustNet tools -->
++			<!-- upper row -->
++			<button
++			       name="tn_rate_btn"
++			       label="Rate"
++			       tool_tip="Give a TrustNet rating to this avatar"
++			       left="10"
++			       bottom_delta="-190"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="tn_explain_btn"
++			       label="Explain"
++			       tool_tip="Explain this avatar's score"
++			       left="100"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<!--lower row-->
++			<button
++			       name="tn_website_btn"
++			       label="Web"
++			       tool_tip="Open a web browser with the TrustNet website"
++			       left="10"
++			       bottom_delta="-24"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="tn_password_btn"
++			       label="Password"
++			       tool_tip="Get a password for the TrustNet website. A new password is generated every time."
++			       left="100"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="tn_renew_btn"
++			       label="Renew"
++			       tool_tip="Renew the TrustNet subscription"
++			       left="190"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			
++		</panel>
++		<panel border="true" bottom_delta="-130" follows="left|top|right|bottom" height="255"
++		       label="Luskwood" left="1" mouse_opaque="true"
++		     name="luskwood_tab" width="398">
++			<!--Luskwood tools, upper row-->
++			<button
++			       name="gowarn_btn"
++			       label="Warn"
++			       tool_tip="Give a warning to this avatar"
++			       left="10"
++			       bottom_delta="-190"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="goeject_btn"
++			       label="Eject"
++			       tool_tip="Eject this avatar"
++			       left="100"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="goaway_btn"
++			       label="Keep away"
++			       tool_tip="Eject, and keep this avatar away for 2 hours"
++			       left="190"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="gohome_btn"
++			       label="Send home"
++			       tool_tip="Send home, and keep this avatar away for 4 hours"
++			       left="280"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<!-- Middle row -->
++			<button
++			       name="gokey_btn"
++			       label="Ban by key"
++			       tool_tip="Turn off the send home function"
++			       left="10"
++			       bottom_delta="-24"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />
++			<button
++			       name="gohomeoff_btn"
++			       label="Off"
++			       tool_tip="Turn off the send home function"
++			       left_delta="90"
++			       bottom_delta="0"
++			       width="80"
++			       height="20"
++			       font="SansSerifSmall"
++			       follows="bottom|left"
++			       />			
++		</panel>
++		<panel border="true" bottom_delta="-150" follows="left|top|right|bottom" height="255"
++		       label="Options" left="1" mouse_opaque="true"
++		     name="options_tab" width="398">
++			<check_box height="16" label="Update"
++				   left="10" bottom_delta="-190" name="update_enabled_cb" 
++				   width="200" follows="bottom|left"
++				   hidden="false" mouse_opaque="true" font="SansSerifSmall"
++				   initial_value="true" enabled="true" radio_style="false" 
++				   tool_tip="Set whether the avatar list should update" />
++			
++			<check_box height="16" label="Get avatar info"
++				   left="20" bottom_delta="-21" name="fetch_avdata_enabled_cb" 
++				   width="200" follows="bottom|left"
++				   hidden="false" mouse_opaque="true" font="SansSerifSmall"
++				   initial_value="true" enabled="true" radio_style="false" 
++			   tool_tip="Set whether avatar information should be retrieved" />			
++		</panel>
++	</tab_container>
++
++</floater>
+diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+index 2728962..50ab0af 100644
+--- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml
++++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+@@ -221,6 +221,13 @@
+ 		     mouse_opaque="true" name="Preferences..." shortcut="control|P" width="153">
+ 			<on_click function="ShowFloater" userdata="preferences" />
+ 		</menu_item_call>
++		<menu_item_separator bottom="-46" enabled="true" height="8" hidden="false" label="-----------"
++		     left="0" mouse_opaque="true" name="separator6" width="211" />
++		<menu_item_check bottom="-65" enabled="true" height="19" hidden="false" label="Avatar List" left="0" mouse_opaque="true" name="Avatar List" width="211">
++			<on_click function="ShowFloater" userdata="avatar list" />
++			<on_check function="FloaterVisible" userdata="avatar list" />
++		</menu_item_check>
++
+ 	</menu>
+ 	<menu bottom="-1" create_jump_keys="true" drop_shadow="true" enabled="true"
+ 	     height="537" label="View" left="80" mouse_opaque="false" name="View"
+@@ -395,6 +402,12 @@
+ 		     mouse_opaque="true" name="Set UI Size to Default" width="188">
+ 			<on_click function="View.DefaultUISize" userdata="" />
+ 		</menu_item_call>
++		<menu_item_separator bottom="-46" enabled="true" height="8" hidden="false" label="-----------"
++		     left="0" mouse_opaque="true" name="separator6" width="211" />
++		<menu_item_check bottom="-65" enabled="true" height="19" hidden="false" label="Avatar List" left="0" mouse_opaque="true" name="Avatar List" width="211">
++			<on_click function="ShowFloater" userdata="avatar list" />
++			<on_check function="FloaterVisible" userdata="avatar list" />
++		</menu_item_check>
+ 	</menu>
+ 	<menu bottom="-18" create_jump_keys="true" drop_shadow="true" enabled="true"
+ 	     height="339" label="World" left="0" mouse_opaque="false" name="World"
+diff --git a/indra/newview/skins/default/xui/en-us/notify.xml b/indra/newview/skins/default/xui/en-us/notify.xml
+index 63396af..cf0056b 100644
+--- a/indra/newview/skins/default/xui/en-us/notify.xml
++++ b/indra/newview/skins/default/xui/en-us/notify.xml
+@@ -915,6 +915,12 @@ You can find example sculpted textures in the inventory library.
+ from this list.
+ 		</message>
+ 	</notify>
++	<!--Database preferences panel -->
++	<notify name="AddSelfDatabase" tip="false">
++		<message name="message">
++			You cannot use yourself as the database avatar.
++		</message>
++	</notify>	
+ 	<notify name="VoiceInviteP2P" tip="false" unique="true">
+ 		<message name="message">
+ 			[NAME] is inviting you to a Voice Chat call. 
+diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_database.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_database.xml
+new file mode 100644
+index 0000000..314b02d
+--- /dev/null
++++ b/indra/newview/skins/default/xui/en-us/panel_preferences_database.xml
+@@ -0,0 +1,166 @@
++<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
++<panel border="true" bottom="-409" enabled="true" follows="left|top|right|bottom"
++       height="408" hidden="false" label="Database" left="102" mouse_opaque="true"
++       name="avatar_db" width="517">
++	
++	<!-- Options section -->
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom="-30" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="12" mouse_opaque="false" name="text_box" v_pad="0" width="300">
++		Options:
++	</text>
++
++	<check_box bottom_delta="0" control_name="DBEnabled" enabled="true"
++		   follows="left|top" font="SansSerifSmall" height="16" hidden="false"
++		   initial_value="false" label="Database enabled" left="148"
++		   mouse_opaque="true" name="database_enabled_cb" radio_style="false"
++	     width="256" />
++	
++	<radio_group bottom_delta="-110" control_name="DBRetrievalMode" draw_border="true" enabled="true"
++		     follows="left|top" height="100" hidden="false" left="148"
++		     mouse_opaque="true" name="Database access type" width="321">
++		<radio_item type="string" length="1" bottom="-20" enabled="true" follows="left|top" height="16" hidden="false"
++			    left="3" mouse_opaque="true" name="UseAvatar" width="315">
++			Avatar:
++		</radio_item>
++		<radio_item type="string" length="1" bottom_delta="-10" enabled="false" follows="left|top" height="16" hidden="false"
++			    left="3" mouse_opaque="true" name="UseURL" width="315">
++			URL:
++		</radio_item>
++	</radio_group>
++	
++	<!-- HACK: apparently line_editor can't go inside a radio_group, so we make it appear
++	     inside while not actually being in there -->
++	<button bottom_delta="78" follows="right|bottom" font="SansSerif" halign="center"
++		height="20" label="Change Avatar" label_selected="Change Avatar" left="260"
++	     mouse_opaque="true" name="change_avatar_btn" width="100" />
++	
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="348" max_length="254" mouse_opaque="true" name="db_avatar"
++		     select_on_focus="false" width="130" control_name="DBAvatar" enabled="false"/>
++	
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="-20"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="db_url"
++		     select_on_focus="false" width="230" enabled="false" control_name="DBURL" />	
++
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="170" mouse_opaque="false" name="text_box" v_pad="0" width="300">
++		Username:
++	</text>	
++
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="db_url_username"
++		     select_on_focus="false" width="230" enabled="false" control_name="DBURLUsername" />
++	
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="170" mouse_opaque="false" name="text_box" v_pad="0" width="300">
++		Password:
++	</text>	
++
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="db_url_password"
++		     select_on_focus="false" width="230" enabled="false" control_name="DBURLPassword" />
++
++	
++	<!--Patterns section-->
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="12" mouse_opaque="false" name="text_box" v_pad="0" width="300">
++		Patterns:
++	</text>
++	
++
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="148" mouse_opaque="false" name="text_box2" v_pad="0" width="300">
++		Send:
++	</text>
++	
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="send_pattern"
++		     select_on_focus="false" width="230" control_name="DBSendPattern" >
++		$NAME
++	</line_editor>
++
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="148" mouse_opaque="false" name="text_box2" v_pad="0" width="300">
++		Positive contains:
++	</text>
++	
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="positive_pattern"
++		     select_on_focus="false" width="230"  control_name="DBPositivePattern" />
++	
++	
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="148" mouse_opaque="false" name="text_box2" v_pad="0" width="300">
++		Negative contains:
++	</text>
++	
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="negative_pattern"
++		     select_on_focus="false" width="230"  control_name="DBNegativePattern" />
++	
++	
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="148" mouse_opaque="false" name="text_box2" v_pad="0" width="300">
++		Denied contains:
++	</text>
++	
++	<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
++		     follows="left|top|right" font="SansSerifSmall" height="16" hidden="false"
++		     left="248" max_length="254" mouse_opaque="true" name="denied_pattern"
++		     select_on_focus="false" width="230"  control_name="DBDeniedPattern" />
++	
++	<!--Timeouts section-->
++	<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
++	      bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top"
++	      font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
++	      left="12" mouse_opaque="false" name="text_box" v_pad="0" width="300">
++		Timeouts:
++	</text>
++		
++	<spinner bottom_delta="-20" control_name="DBMaxConcurrentRequests" decimal_digits="0" enabled="true"
++		 follows="left|top" height="16" hidden="false" increment="1"
++		 initial_val="4" label="Max concurrent requests:" label_width="138" left="148"
++		 max_val="32" min_val="1" mouse_opaque="true" name="max_concurrent_requests"
++		 width="202" />
++
++	<spinner bottom_delta="-20" control_name="DBDelayBetweenRequests" decimal_digits="0" enabled="true"
++		 follows="left|top" height="16" hidden="false" increment="1"
++		 initial_val="1" label="Delay between requests:" label_width="138" left="148"
++		 max_val="32" min_val="0" mouse_opaque="true" name="delay_between_requests"
++		 width="202" />
++	
++	<spinner bottom_delta="-20" control_name="DBRequestTimeout" decimal_digits="0" enabled="true"
++		 follows="left|top" height="16" hidden="false" increment="4"
++		 initial_val="64" label="Request timeout:" label_width="138" left="148"
++		 max_val="65536" min_val="16" mouse_opaque="true" name="request_timeout"
++		 width="202" />
++	
++	<spinner bottom_delta="-20" control_name="DBGiveUpAfter" decimal_digits="0" enabled="true"
++		 follows="left|top" height="16" hidden="false" increment="64"
++		 initial_val="4096" label="Give up after:" label_width="138" left="148"
++		 max_val="65536" min_val="64" mouse_opaque="true" name="give_up_after"
++		 width="202" />
++</panel>
+\ No newline at end of file
+diff --git a/indra/newview/skins/default/xui/en-us/panel_toolbar.xml b/indra/newview/skins/default/xui/en-us/panel_toolbar.xml
+index 9c57be0..b264e6e 100644
+--- a/indra/newview/skins/default/xui/en-us/panel_toolbar.xml
++++ b/indra/newview/skins/default/xui/en-us/panel_toolbar.xml
+@@ -18,6 +18,12 @@
+ 	       list_position="above"
+ 	       width="50" follows="left|right" user_resize="false"/>
+     <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0"/>
++ 	<button bottom="0" font="SansSerif" height="24" label="Avatars" left="0"
++ 	     name="avatar_list_btn" tool_tip="List of nearby avatars" width="50" 
++         image_selected="toolbar_btn_selected.tga" 
++         image_unselected="toolbar_btn_enabled.tga" scale_image="true"
++		 follows="left|right" user_resize="false" />	
++    <icon image_name="spacer24.tga" width="2" height="2" follows="left|right" auto_resize="false" color="0,0,0,0"/>
+     <button bottom="0" font="SansSerif" height="24" label="Fly"
+         image_overlay="icn_toolbar_fly.tga" image_overlay_alignment="left"
+                         image_selected="toolbar_btn_selected.tga"
+@@ -68,3 +74,4 @@
+   </layout_stack>
+ 
+ </panel>
++
+-- 
+tg: (b606591..) topic/features/jira-backported/avatar_list (depends on: master)
diff --git a/debian/patches/topic/features/jira-sent/24_always_test_vectorize.diff b/debian/patches/topic/features/jira-sent/24_always_test_vectorize.diff
new file mode 100644
index 0000000..6ee005a
--- /dev/null
+++ b/debian/patches/topic/features/jira-sent/24_always_test_vectorize.diff
@@ -0,0 +1,39 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/features/jira-sent/24_always_test_vectorize
+
+Always test to see if CPU has sse/altivect expernsions, regardless of compile host.
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/llappviewer.cpp |    8 --------
+ 1 files changed, 0 insertions(+), 8 deletions(-)
+
+diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
+index 49991b4..34205c6 100644
+--- a/indra/newview/llappviewer.cpp
++++ b/indra/newview/llappviewer.cpp
+@@ -419,7 +419,6 @@ static void settings_modify()
+ 	gDebugGL = gSavedSettings.getBOOL("RenderDebugGL");
+ 	gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
+ 	
+-#if LL_VECTORIZE
+ 	if (gSysCPU.hasAltivec())
+ 	{
+ 		gSavedSettings.setBOOL("VectorizeEnable", TRUE );
+@@ -445,13 +444,6 @@ static void settings_modify()
+ 		gSavedSettings.setU32("VectorizeProcessor", 0 );
+ 		gSavedSettings.setBOOL("VectorizeSkin", FALSE);
+ 	}
+-#else
+-	// This build target doesn't support SSE, don't test/run.
+-	gSavedSettings.setBOOL("VectorizePerfTest", FALSE );
+-	gSavedSettings.setBOOL("VectorizeEnable", FALSE );
+-	gSavedSettings.setU32("VectorizeProcessor", 0 );
+-	gSavedSettings.setBOOL("VectorizeSkin", FALSE);
+-#endif
+ }
+ 
+ void LLAppViewer::initGridChoice()
+-- 
+tg: (c8fb40a..) topic/features/jira-sent/24_always_test_vectorize (depends on: upstream)
diff --git a/debian/patches/topic/features/jira-sent/openal_1.21.0.diff b/debian/patches/topic/features/jira-sent/openal_1.21.0.diff
new file mode 100644
index 0000000..e2cb311
--- /dev/null
+++ b/debian/patches/topic/features/jira-sent/openal_1.21.0.diff
@@ -0,0 +1,1085 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/features/jira-sent/openal_1.21.0
+
+My version of openal and gstreamer patches.
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/cmake/LLAudio.cmake            |   10 +-
+ indra/cmake/OPENAL.cmake             |   14 +
+ indra/llaudio/CMakeLists.txt         |   18 +
+ indra/llaudio/audioengine.cpp        |    6 +
+ indra/llaudio/audioengine.h          |    4 +
+ indra/llaudio/audioengine_openal.cpp |  618 ++++++++++++++++++++++++++++++++++
+ indra/llaudio/audioengine_openal.h   |  123 +++++++
+ indra/llaudio/listener_openal.cpp    |   95 ++++++
+ indra/llaudio/listener_openal.h      |    4 +
+ indra/newview/CMakeLists.txt         |    6 +
+ indra/newview/llstartup.cpp          |   14 +-
+ 11 files changed, 908 insertions(+), 4 deletions(-)
+
+diff --git a/indra/cmake/LLAudio.cmake b/indra/cmake/LLAudio.cmake
+index eff643d..124067b 100644
+--- a/indra/cmake/LLAudio.cmake
++++ b/indra/cmake/LLAudio.cmake
+@@ -6,4 +6,12 @@ set(LLAUDIO_INCLUDE_DIRS
+     ${LIBS_OPEN_DIR}/llaudio
+     )
+ 
+-set(LLAUDIO_LIBRARIES llaudio)
++set(LLAUDIO_LIBRARIES
++    llaudio
++    ${VORBISENC_LIBRARIES}
++    ${VORBISFILE_LIBRARIES}
++    ${VORBIS_LIBRARIES}
++    ${OGG_LIBRARIES}
++    ${OPENAL_LIBRARIES}
++    )
++
+diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake
+new file mode 100644
+index 0000000..ad0ebfc
+--- /dev/null
++++ b/indra/cmake/OPENAL.cmake
+@@ -0,0 +1,14 @@
++
++set(OPENAL OFF CACHE BOOL "Enable OpenAL")
++
++
++if (OPENAL)
++	include(FindPkgConfig)
++	pkg_check_modules(OPENAL_LIB REQUIRED openal)
++	pkg_check_modules(FREEAULT_LIB REQUIRED freealut)
++	set(OPENAL_LIBRARIES 
++		openal
++		alut
++	)
++		
++endif (OPENAL)
+diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
+index ebedcab..ed008ae 100644
+--- a/indra/llaudio/CMakeLists.txt
++++ b/indra/llaudio/CMakeLists.txt
+@@ -9,6 +9,7 @@ include(LLCommon)
+ include(LLMath)
+ include(LLMessage)
+ include(LLVFS)
++include(LLMedia)
+ 
+ include_directories(
+     ${FMOD_INCLUDE_DIR}
+@@ -20,6 +21,10 @@ include_directories(
+     ${VORBISENC_INCLUDE_DIRS}
+     ${VORBISFILE_INCLUDE_DIRS}
+     ${VORBIS_INCLUDE_DIRS}
++    ${OPENAL_LIB_INCLUDE_DIRS}
++    ${FREEAULT_LIB_INCLUDE_DIRS}
++    ${LLMEDIA_INCLUDE_DIRS}
++    ${GSTREAMER_INCLUDE_DIRS}
+     )
+ 
+ set(llaudio_SOURCE_FILES
+@@ -59,6 +64,19 @@ if (FMOD)
+     endif (LINUX)
+ endif (FMOD)
+ 
++if (OPENAL)
++	list(APPEND llaudio_SOURCE_FILES
++	audioengine_openal.cpp
++	listener_openal.cpp
++	)
++
++	list(APPEND llaudio_HEADER_FILES
++	audioengine_openal.h
++	listener_openal.h
++	)
++  	
++endif (OPENAL)
++
+ set_source_files_properties(${llaudio_HEADER_FILES}
+                             PROPERTIES HEADER_FILE_ONLY TRUE)
+ 
+diff --git a/indra/llaudio/audioengine.cpp b/indra/llaudio/audioengine.cpp
+index 298ab1d..130231d 100644
+--- a/indra/llaudio/audioengine.cpp
++++ b/indra/llaudio/audioengine.cpp
+@@ -114,6 +114,8 @@ BOOL LLAudioEngine::init(const S32 num_channels, void* userdata)
+ 	// Initialize the decode manager
+ 	gAudioDecodeMgrp = new LLAudioDecodeMgr;
+ 
++	llinfos << "LLAudioEngine::init() AudioEngine successfully initialized" << llendl;
++
+ 	return TRUE;
+ }
+ 
+@@ -1360,7 +1362,11 @@ BOOL LLAudioSource::play(const LLUUID &audio_uuid)
+ BOOL LLAudioSource::isDone()
+ {
+ 	const F32 MAX_AGE = 60.f;
++#if LL_OPENAL
++	const F32 MAX_UNPLAYED_AGE = 30.f;
++#else
+ 	const F32 MAX_UNPLAYED_AGE = 15.f;
++#endif
+ 	if (isLoop())
+ 	{
+ 		// Looped sources never die on their own.
+diff --git a/indra/llaudio/audioengine.h b/indra/llaudio/audioengine.h
+index b8153a3..877231a 100644
+--- a/indra/llaudio/audioengine.h
++++ b/indra/llaudio/audioengine.h
+@@ -173,6 +173,10 @@ public:
+ 	static void assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, void *user_data, S32 result_code, LLExtStat ext_status);
+ 
+ 
++	#if LL_OPENAL
++		virtual void InitStreamer() = 0;
++	#endif
++
+ 	friend class LLPipeline; // For debugging
+ public:
+ 	F32 mMaxWindGain; // Hack.  Public to set before fade in?
+diff --git a/indra/llaudio/audioengine_openal.cpp b/indra/llaudio/audioengine_openal.cpp
+new file mode 100644
+index 0000000..d6a2f12
+--- /dev/null
++++ b/indra/llaudio/audioengine_openal.cpp
+@@ -0,0 +1,618 @@
++/**
++ * @file audioengine_openal.cpp
++ * @brief implementation of audio engine using OpenAL
++ * support as a OpenAL 3D implementation
++ *
++ * Copyright (c) 2002-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.
++ */
++
++#include "linden_common.h"
++
++#include "audioengine_openal.h"
++#include "listener_openal.h"
++
++
++#if LL_OPENAL_WIND
++// Variables and definitions for Wind
++#define NO_WIND_BUFFERS 20
++static ALuint wind_buffers[NO_WIND_BUFFERS];
++static ALuint wind_sources[1];
++static S16 *winddata=NULL;
++
++static BOOL first_wind=TRUE;
++
++ALfloat source0Vel[]={ 0.0, 0.0, 0.0};
++
++// These globals for the wind filter.  Blech!
++F64 gbuf0 = 0.0;
++F64 gbuf1 = 0.0;
++F64 gbuf2 = 0.0;
++F64 gbuf3 = 0.0;
++F64 gbuf4 = 0.0;
++F64 gbuf5 = 0.0;
++F64 gY0 = 0.0;
++F64 gY1 = 0.0;
++
++F32 gTargetGain = 0.f;
++F32 gCurrentGain = 0.f;
++F32 gTargetFreq = 100.f;
++F32 gCurrentFreq = 100.f;
++F32 gTargetPanGainR = 0.5f;
++F32 gCurrentPanGainR = 0.5f;
++#endif // LL_OPENAL_WIND
++
++LLAudioEngine_OpenAL::LLAudioEngine_OpenAL(){
++
++#if LL_GSTREAMER_ENABLED
++	mMedia_data = new LLMediaManagerData;
++	LLMediaImplGStreamer::startup( mMedia_data );	// initialize GStreamer
++
++	m_streamer=new LLMediaImplGStreamer ();
++
++	if(!m_streamer)
++	{
++		llwarns << "LLAudioEngine_OpenAL::LLAudioEngine_OpenAL() Failed to create our private gstreamer audio instance" << llendl;
++	}
++#endif
++}
++
++LLAudioEngine_OpenAL::~LLAudioEngine_OpenAL(){
++}
++
++BOOL LLAudioEngine_OpenAL::init(const S32 num_channels, void* userdata){
++
++	LLAudioEngine::init(num_channels, userdata);
++
++	if(!alutInit(NULL, NULL)){
++		llwarns << "LLAudioEngine_OpenAL::init() ALUT initialization failed: " << alutGetErrorString (alutGetError ()) << llendl;
++		return FALSE;
++	}
++
++	initInternetStream();
++
++	llinfos << "LLAudioEngine_OpenAL::init() OpenAL successfully initialized" << llendl;
++
++	llinfos << "LLAudioEngine_OpenAL::init() Speed of sound is: " << alGetFloat(AL_SPEED_OF_SOUND) << llendl;
++
++	return TRUE;
++}
++
++void LLAudioEngine_OpenAL::idle(F32 max_decode_time){
++	LLAudioEngine::idle(max_decode_time);
++#if LL_GSTREAMER_ENABLED
++       if(m_streamer != NULL)
++		m_streamer->updateMedia();
++#endif
++}
++
++void LLAudioEngine_OpenAL::allocateListener(){
++	mListenerp = (LLListener *) new LLListener_OpenAL();
++	if(!mListenerp){
++		llwarns << "LLAudioEngine_OpenAL::allocateListener() Listener creation failed" << llendl;
++	}
++}
++
++void LLAudioEngine_OpenAL::shutdown(){
++	LLAudioEngine::shutdown();
++
++	if(!alutExit()){
++		llwarns << "LLAudioEngine_OpenAL::shutdown() ALUT shutdown failed: " << alutGetErrorString (alutGetError ()) << llendl;
++	}
++
++	llinfos << "LLAudioEngine_OpenAL::shutdown() OpenAL successfully shut down" << llendl;
++
++	delete mListenerp;
++	mListenerp = NULL;
++
++#if LL_GSTREAMER_ENABLED
++	if(m_streamer){
++		delete m_streamer;
++		m_streamer = NULL;
++	}
++#endif
++}
++
++LLAudioBuffer *LLAudioEngine_OpenAL::createBuffer(){
++   return new LLAudioBufferOpenAL();
++}
++
++LLAudioChannel *LLAudioEngine_OpenAL::createChannel(){
++   return new LLAudioChannelOpenAL();
++}
++
++void LLAudioEngine_OpenAL::setInternalGain(F32 gain){
++	//llinfos << "LLAudioEngine_OpenAL::setInternalGain() Gain: " << gain << llendl;
++	alListenerf(AL_GAIN, gain);
++}
++
++LLAudioChannelOpenAL::LLAudioChannelOpenAL(){
++	alGenSources(1, &ALSource);
++}
++
++LLAudioChannelOpenAL::~LLAudioChannelOpenAL(){
++	cleanup();
++	alDeleteSources(1, &ALSource);
++}
++
++void LLAudioChannelOpenAL::cleanup(){
++	alSourceStop(ALSource);
++	mCurrentBufferp = NULL;
++}
++
++void LLAudioChannelOpenAL::play(){
++	if(!isPlaying()){
++		alSourcePlay(ALSource);
++		getSource()->setPlayedOnce(TRUE);
++	}
++}
++
++void LLAudioChannelOpenAL::playSynced(LLAudioChannel *channelp){
++	play();
++}
++
++BOOL LLAudioChannelOpenAL::isPlaying(){
++	ALint state;
++	alGetSourcei(ALSource, AL_SOURCE_STATE, &state);
++	if(state == AL_PLAYING){
++		return TRUE;
++	}
++	return FALSE;
++}
++
++BOOL LLAudioChannelOpenAL::updateBuffer(){
++	if (LLAudioChannel::updateBuffer()){
++		// Base class update returned TRUE, which means that we need to actually
++		// set up the source for a different buffer.
++		LLAudioBufferOpenAL *bufferp = (LLAudioBufferOpenAL *)mCurrentSourcep->getCurrentBuffer();
++		alSourcei(ALSource, AL_BUFFER, bufferp->getBuffer());
++		alSourcef(ALSource, AL_GAIN, mCurrentSourcep->getGain());
++		alSourcei(ALSource, AL_LOOPING, mCurrentSourcep->isLoop() ? AL_TRUE : AL_FALSE);
++	}
++
++	return TRUE;
++}
++
++void LLAudioChannelOpenAL::update3DPosition(){
++	if(!mCurrentSourcep){
++		return;
++	}
++	if (mCurrentSourcep->isAmbient()){
++		alSource3f(ALSource, AL_POSITION, 0.0, 0.0, 0.0);
++		alSource3f(ALSource, AL_VELOCITY, 0.0, 0.0, 0.0);
++		//alSource3f(ALSource, AL_DIRECTION, 0.0, 0.0, 0.0);
++		alSourcef (ALSource, AL_ROLLOFF_FACTOR, 0.0);
++		alSourcei (ALSource, AL_SOURCE_RELATIVE, AL_TRUE);
++	}else{
++		LLVector3 float_pos;
++		float_pos.setVec(mCurrentSourcep->getPositionGlobal());
++		alSourcefv(ALSource, AL_POSITION, float_pos.mV);
++		//llinfos << "LLAudioChannelOpenAL::update3DPosition() Velocity: " << mCurrentSourcep->getVelocity() << llendl;
++		alSourcefv(ALSource, AL_VELOCITY, mCurrentSourcep->getVelocity().mV);
++		//alSource3f(ALSource, AL_DIRECTION, 0.0, 0.0, 0.0);
++		alSourcef (ALSource, AL_ROLLOFF_FACTOR, 1.0);
++		alSourcei (ALSource, AL_SOURCE_RELATIVE, AL_FALSE);
++	}
++	//llinfos << "LLAudioChannelOpenAL::update3DPosition() Gain: " << mCurrentSourcep->getGain() << llendl;
++	alSourcef(ALSource, AL_GAIN, mCurrentSourcep->getGain());
++}
++
++LLAudioBufferOpenAL::LLAudioBufferOpenAL(){
++	ALBuffer = AL_NONE;
++}
++
++LLAudioBufferOpenAL::~LLAudioBufferOpenAL(){
++	cleanup();
++}
++
++void LLAudioBufferOpenAL::cleanup(){
++	if(ALBuffer != AL_NONE){
++		alDeleteBuffers(1, &ALBuffer);
++	}
++}
++
++BOOL LLAudioBufferOpenAL::loadWAV(const std::string& filename){
++	cleanup();
++	ALBuffer = alutCreateBufferFromFile(filename.c_str());
++	if(ALBuffer == AL_NONE){
++		//ALenum error = alutGetError();
++		//llwarns << "LLAudioBufferOpenAL::loadWAV() Error loading " << filename
++		//	<< " " << alutGetErrorString(error) << llendl;
++		return FALSE;
++	}
++
++	return TRUE;
++}
++
++U32 LLAudioBufferOpenAL::getLength(){
++	if(ALBuffer == AL_NONE){
++		return 0;
++	}
++	ALint length;
++	alGetBufferi(ALBuffer, AL_SIZE, &length);
++	return length >> 2;
++}
++
++// ------------
++
++void LLAudioEngine_OpenAL::initWind(){
++#if LL_OPENAL_WIND
++	ALenum error;
++       llinfos << "LLAudioEngine_OpenAL::initWind() start" << llendl;
++
++       alGetError(); /* clear error */
++       alGenBuffers(NO_WIND_BUFFERS,wind_buffers);
++       if((error=alGetError()) != AL_NO_ERROR)
++       {
++               llwarns << "LLAudioEngine_OpenAL::initWind() Error creating wind buffers: "<<error<<llendl;
++       }
++
++       alGenSources(1,wind_sources);
++
++       if((error=alGetError()) != AL_NO_ERROR)
++       {
++               llwarns << "LLAudioEngine_OpenAL::initWind() Error creating wind sources: "<<error<<llendl;
++       }
++
++       winddata=(S16*)malloc(sizeof(S16)*44100*0.2*2*2); //200ms @44100Hz Stereo
++
++       if(winddata==NULL)
++       {
++               llerrs << "LLAudioEngine_OpenAL::initWind() Error creating wind memory buffer" << llendl;
++               mEnableWind=FALSE;
++       }
++
++       llinfos << "LLAudioEngine_OpenAL::initWind() done" << llendl;
++#endif
++}
++
++void LLAudioEngine_OpenAL::cleanupWind(){
++#if LL_OPENAL_WIND
++       llinfos << "LLAudioEngine_OpenAL::cleanupWind()" << llendl;
++
++       alDeleteBuffers(NO_WIND_BUFFERS,wind_buffers);
++
++       alDeleteSources(1, wind_sources);
++
++       if(winddata)
++               free(winddata);
++#endif
++}
++
++void LLAudioEngine_OpenAL::updateWind(LLVector3 wind_vec, F32 camera_altitude){
++#if LL_OPENAL_WIND
++       LLVector3 wind_pos;
++       F64 pitch;
++       F64 center_freq;
++       ALenum error;
++
++       mMaxWindGain=1.0;
++
++       if (!mEnableWind)
++               return;
++
++       if(!winddata)
++               return;
++
++       if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL))
++       {
++
++               // wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up)
++               // need to convert this to the conventional orientation DS3D and OpenAL use
++               // where +X = right, +Y = up, +Z = backwards
++
++               wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]);
++
++               // cerr << "Wind update" << endl;
++
++               pitch = 1.0 + mapWindVecToPitch(wind_vec);
++               center_freq = 80.0 * pow(pitch,2.5*(mapWindVecToGain(wind_vec)+1.0));
++
++               gTargetFreq = (F32)center_freq;
++               gTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain;
++               gTargetPanGainR = (F32)mapWindVecToPan(wind_vec);
++
++               ALfloat source0Pos[]={mListenerp->getPosition().mV[0],mListenerp->getPosition().mV[1],mListenerp->getPosition().mV[2]};
++
++               alSourcef(wind_sources[0], AL_GAIN, gTargetGain);
++               alSourcef(wind_sources[0], AL_PITCH, pitch);
++               alSourcefv(wind_sources[0], AL_POSITION, source0Pos);
++               alSourcefv(wind_sources[0], AL_VELOCITY, source0Vel);
++               alSourcei(wind_sources[0], AL_LOOPING, AL_FALSE);
++
++       }
++
++       // ok lets make a wind buffer now
++
++       if(first_wind==TRUE)
++       {
++               llinfos << "LLAudioEngine_OpenAL::updateWind() making first buffer" << llendl;
++               alGetError(); /* clear error */
++
++               for(int counter=0;counter<NO_WIND_BUFFERS;counter++)
++               {
++                       alBufferData(wind_buffers[counter],AL_FORMAT_STEREO16,windDSP((void*)winddata,2*44100*0.02),2*44100*0.02*sizeof(U16),44100);
++                       if((error=alGetError()) != AL_NO_ERROR)
++                       {
++                               llwarns << "LLAudioEngine_OpenAL::initWind() Error creating INITAL WIND BUFFER 1: "<<error<<llendl;
++                       }
++               }
++
++               alSourceQueueBuffers(wind_sources[0], NO_WIND_BUFFERS, wind_buffers);
++
++               alSourcePlay(wind_sources[0]);
++               if((error=alGetError()) != AL_NO_ERROR)
++               {
++                       llwarns << "LLAudioEngine_OpenAL::initWind() Error inital wind play: "<<error<<llendl;
++               }
++
++               first_wind=FALSE;
++               llinfos << "LLAudioEngine_OpenAL::updateWind() making first buffer DONE!" << llendl;
++
++       }
++       else
++       {
++               int processed;
++               alGetSourcei(wind_sources[0], AL_BUFFERS_PROCESSED, &processed);
++
++               while(processed--)
++               {
++                       ALuint buffer;
++                       int error;
++                       alSourceUnqueueBuffers(wind_sources[0], 1, &buffer);
++                       error = alGetError();
++                       if(error != AL_NO_ERROR)
++                               llwarns << "LLAudioEngine_OpenAL::updateWind() error swapping buffers" << llendl;
++
++                       alBufferData(buffer,AL_FORMAT_STEREO16,windDSP((void*)winddata,44100*0.2),2*44100*0.2*sizeof(U16),44100);
++                       error = alGetError();
++                       if(error != AL_NO_ERROR)
++                               llwarns << "LLAudioEngine_OpenAL::updateWind() error swapping buffers" << llendl;
++
++
++                       alSourceQueueBuffers(wind_sources[0], 1, &buffer);
++                       error = alGetError();
++                       if(error != AL_NO_ERROR)
++                               llwarns << "LLAudioEngine_OpenAL::updateWind() error swapping buffers" << llendl;
++
++
++               }
++
++               int playing;
++               alGetSourcei(wind_sources[0], AL_SOURCE_STATE, &playing);
++
++               if(playing==AL_STOPPED)
++                       alSourcePlay(wind_sources[0]);
++
++       }
++#endif //LL_OPENAL_WIND
++}
++
++inline S16 clipSample(S16 sample, S16 min, S16 max)
++{
++#if LL_OPENAL_WIND
++       if (sample > max)
++               sample = max;
++       else if (sample < min)
++               sample = min;
++
++#endif
++       return sample;
++}
++
++void * LLAudioEngine_OpenAL::windDSP(void *newbuffer, int length)
++{
++#if LL_OPENAL_WIND
++       // newbuffer = the buffer passed from the previous DSP unit.
++       // length = length in samples at this mix time.
++
++       U8 *cursamplep = (U8*)newbuffer;
++       U8   wordsize = 2;
++
++       double bandwidth = 50;
++       double inputSamplingRate = 44100;
++       double a0,b1,b2;
++
++       // calculate resonant filter coeffs
++       b2 = exp(-(F_TWO_PI) * (bandwidth / inputSamplingRate));
++
++       while (length--)
++       {
++               gCurrentFreq = (float)((0.999 * gCurrentFreq) + (0.001 * gTargetFreq));
++               gCurrentGain = (float)((0.999 * gCurrentGain) + (0.001 * gTargetGain));
++               gCurrentPanGainR = (float)((0.999 * gCurrentPanGainR) + (0.001 * gTargetPanGainR));
++               b1 = (-4.0 * b2) / (1.0 + b2) * cos(F_TWO_PI * (gCurrentFreq / inputSamplingRate));
++               a0 = (1.0 - b2) * sqrt(1.0 - (b1 * b1) / (4.0 * b2));
++               double nextSample;
++
++           // start with white noise
++               nextSample = ll_frand(2.0f) - 1.0f;
++
++#if 1 // LLAE_WIND_PINK apply pinking filter
++               gbuf0 = 0.997f * gbuf0 + 0.0126502f * nextSample;
++               gbuf1 = 0.985f * gbuf1 + 0.0139083f * nextSample;
++               gbuf2 = 0.950f * gbuf2 + 0.0205439f * nextSample;
++               gbuf3 = 0.850f * gbuf3 + 0.0387225f * nextSample;
++               gbuf4 = 0.620f * gbuf4 + 0.0465932f * nextSample;
++               gbuf5 = 0.250f * gbuf5 + 0.1093477f * nextSample;
++
++                       nextSample = gbuf0 + gbuf1 + gbuf2 + gbuf3 + gbuf4 + gbuf5;
++#endif
++
++#if 1 //LLAE_WIND_RESONANT // do a resonant filter on the noise
++               nextSample = (double)( a0 * nextSample - b1 * gY0 - b2 * gY1 );
++
++               gY1 = gY0;
++               gY0 = nextSample;
++#endif
++               nextSample *= gCurrentGain;
++
++               S16     sample;
++
++               sample = llfloor(((F32)nextSample*32768.f*(1.0f - gCurrentPanGainR))+0.5f);
++               *(S16*)cursamplep = clipSample(sample, -32768, 32767);
++
++               cursamplep += wordsize;
++
++               sample = llfloor(((F32)nextSample*32768.f*gCurrentPanGainR)+0.5f);
++
++               sample = llfloor(((F32)nextSample*32768.f*gCurrentPanGainR)+0.5f);
++               *(S16*)cursamplep = clipSample(sample, -32768, 32767);
++               cursamplep += wordsize;
++       }
++
++#endif //LL_OPENAL_WIND
++       return newbuffer;
++}
++
++// ------------
++
++void LLAudioEngine_OpenAL::InitStreamer()
++{
++#if LL_GSTREAMER_ENABLED
++       m_streamer=new LLMediaImplGStreamer ();
++
++       if(!m_streamer)
++       {
++               llwarns << "LLAudioEngine_OpenAL::LLAudioEngine_OpenAL() Failed to create our private gstreamer audio instance" << llendl;
++       }
++
++       if(m_streamer)
++       {
++               m_streamer->init ();
++       }
++#endif
++}
++
++// ------------
++
++void LLAudioEngine_OpenAL::initInternetStream(){
++	if(!mInternetStreamURL.empty())
++		mInternetStreamURL.erase();
++}
++
++void LLAudioEngine_OpenAL::startInternetStream(const std::string& url){
++
++#if LL_GSTREAMER_ENABLED
++	if(!m_streamer)
++		return;
++// DCF_DEBUG
++llinfos << "entered LLAudioEngine_OpenAL::startInternetStream()" << llendl;
++	
++
++	if (!url.empty()) {
++		llinfos << "LLAudioEngine_OpenAL::startInternetStream() Starting internet stream: " << url << llendl;
++		mInternetStreamURL=url;
++		m_streamer->navigateTo ( url );
++		llinfos << "Playing....." << llendl;		
++		m_streamer->addCommand(LLMediaBase::COMMAND_START);
++		m_streamer->updateMedia();
++
++	}else{
++		llinfos << "LLAudioEngine_OpenAL setting stream to NULL"<< llendl;
++		mInternetStreamURL.erase();
++		m_streamer->addCommand(LLMediaBase::COMMAND_STOP);
++		m_streamer->updateMedia();
++	}
++#endif
++}
++
++void LLAudioEngine_OpenAL::updateInternetStream(){
++// DCF_DEBUG
++llinfos << "entered LLAudioEngine_OpenAL::updateInternetStream()" << llendl;
++	
++}
++
++void LLAudioEngine_OpenAL::stopInternetStream(){
++// DCF_DEBUG
++llinfos << "entered LLAudioEngine_OpenAL::stopInternetStream()" << llendl;
++	
++#if LL_GSTREAMER_ENABLED
++	if( ! m_streamer->addCommand(LLMediaBase::COMMAND_STOP)){
++		llinfos << "attempting to stop stream failed!" << llendl;
++	}
++	m_streamer->updateMedia();
++#endif
++	mInternetStreamURL.erase();
++}
++
++void LLAudioEngine_OpenAL::pauseInternetStream(int pause){
++#if LL_GSTREAMER_ENABLED
++	if(!m_streamer)
++		return;
++// DCF_DEBUG
++llinfos << "entered LLAudioEngine_OpenAL::pauseInternetStream()" << llendl;
++	
++	if(pause){
++		if(!m_streamer->addCommand(LLMediaBase::COMMAND_PAUSE)){
++			llinfos << "attempting to pause stream failed!" << llendl;
++		}
++		m_streamer->updateMedia();
++	}else{
++		if( ! m_streamer->addCommand(LLMediaBase::COMMAND_START)){
++			llinfos << "attempting to pause stream failed!" << llendl;
++		}
++		m_streamer->updateMedia();
++	}
++#endif
++}
++
++int LLAudioEngine_OpenAL::isInternetStreamPlaying(){
++
++#if LL_GSTREAMER_ENABLED
++	if(!m_streamer)
++		return 0;
++	
++	if(m_streamer->getStatus() == LLMediaBase::STATUS_STARTED)
++	{
++		return 1; // Active and playing
++	}	
++
++	if(m_streamer->getStatus() == LLMediaBase::STATUS_PAUSED)
++	{
++		return 2; // paused
++	}
++#endif
++	return 0; // Stopped
++}
++
++void LLAudioEngine_OpenAL::getInternetStreamInfo(char* artist_out, char* title_out){
++}
++
++void LLAudioEngine_OpenAL::setInternetStreamGain(F32 vol){
++#if LL_GSTREAMER_ENABLED
++	// Set the gstreamer volume here
++	if(!m_streamer)
++		return;
++
++	vol = llclamp(vol, 0.f, 1.f);
++	m_streamer->setVolume(vol);
++	m_streamer->updateMedia();
++
++#endif
++}
++
++const std::string& LLAudioEngine_OpenAL::getInternetStreamURL(){
++	return mInternetStreamURL;
++}
++
+diff --git a/indra/llaudio/audioengine_openal.h b/indra/llaudio/audioengine_openal.h
+new file mode 100644
+index 0000000..604e8eb
+--- /dev/null
++++ b/indra/llaudio/audioengine_openal.h
+@@ -0,0 +1,123 @@
++/**
++ * @file audioengine_openal.cpp
++ * @brief implementation of audio engine using OpenAL
++ * support as a OpenAL 3D implementation
++ *
++ * Copyright (c) 2002-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.
++ */
++
++
++#ifndef LL_AUDIOENGINE_OpenAL_H
++#define LL_AUDIOENGINE_OpenAL_H
++
++#undef XMLCALL
++
++#include <string>
++
++#include "audioengine.h"
++#include "listener_openal.h"
++
++
++#if LL_GSTREAMER_ENABLED
++#include "llmediamanager.h"
++#include "llmediaimplgstreamer.h"
++#endif
++
++#include "llrand.h"
++
++class LLAudioEngine_OpenAL : public LLAudioEngine{
++	public:
++		LLAudioEngine_OpenAL();
++		virtual ~LLAudioEngine_OpenAL();
++
++		virtual BOOL init(const S32 num_channels, void *user_data);
++		virtual void allocateListener();
++
++		virtual void shutdown();
++
++		virtual void idle(F32 max_decode_time = 0.f);
++
++		void setInternalGain(F32 gain);
++
++		LLAudioBuffer* createBuffer();
++		LLAudioChannel* createChannel();
++
++		// Internet stream methods
++		virtual void initInternetStream();
++		virtual void startInternetStream(const std::string& url);
++		virtual void stopInternetStream();
++		virtual void updateInternetStream();
++		virtual void pauseInternetStream(int pause);
++		virtual int isInternetStreamPlaying();
++		virtual void getInternetStreamInfo(char* artist, char* title);
++		virtual void setInternetStreamGain(F32 vol);
++		virtual const std::string& getInternetStreamURL();
++		virtual void InitStreamer();
++
++		void initWind();
++		void cleanupWind();
++		void updateWind(LLVector3 direction, F32 camera_altitude);
++
++	protected:
++		std::string mInternetStreamURL;
++		void * windDSP(void *newbuffer, int length);
++#if LL_GSTREAMER_ENABLED
++		LLMediaManagerData * mMedia_data;
++		LLMediaImplGStreamer * m_streamer;
++#endif
++};
++
++class LLAudioChannelOpenAL : public LLAudioChannel{
++	public:
++		LLAudioChannelOpenAL();
++		virtual ~LLAudioChannelOpenAL();
++	protected:
++		void play();
++		void playSynced(LLAudioChannel *channelp);
++		void cleanup();
++		BOOL isPlaying();
++
++		BOOL updateBuffer();
++		void update3DPosition();
++		void updateLoop(){};
++
++		ALuint ALSource;
++};
++
++class LLAudioBufferOpenAL : public LLAudioBuffer{
++	public:
++		LLAudioBufferOpenAL();
++		virtual ~LLAudioBufferOpenAL();
++
++		BOOL loadWAV(const std::string& filename);
++		U32 getLength();
++
++		friend class LLAudioChannelOpenAL;
++	protected:
++		void cleanup();
++		ALuint getBuffer(){return ALBuffer;}
++		ALuint ALBuffer;
++};
++
++#endif
+diff --git a/indra/llaudio/listener_openal.cpp b/indra/llaudio/listener_openal.cpp
+new file mode 100644
+index 0000000..e4c6f64
+--- /dev/null
++++ b/indra/llaudio/listener_openal.cpp
+@@ -0,0 +1,95 @@
++/**
++ * @file audioengine_openal.cpp
++ * @brief implementation of audio engine using OpenAL
++ * support as a OpenAL 3D implementation
++ *
++ * Copyright (c) 2002-2007, 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.
++ */
++
++#include "linden_common.h"
++#include "audioengine.h"
++
++#include "listener_openal.h"
++
++LLListener_OpenAL::LLListener_OpenAL(){
++	init();
++}
++
++LLListener_OpenAL::~LLListener_OpenAL(){
++}
++
++void LLListener_OpenAL::translate(LLVector3 offset){
++	LLListener::translate(offset);
++	llinfos << "LLListener_OpenAL::translate() : " << offset << llendl;
++}
++
++void LLListener_OpenAL::setPosition(LLVector3 pos){
++	LLListener::setPosition(pos);
++	//llinfos << "LLListener_OpenAL::setPosition() : " << pos << llendl;
++}
++
++void LLListener_OpenAL::setVelocity(LLVector3 vel){
++	LLListener::setVelocity(vel);
++}
++
++void LLListener_OpenAL::orient(LLVector3 up, LLVector3 at){
++	LLListener::orient(up, at);
++	//llinfos << "LLListener_OpenAL::orient() up: " << up << " at: " << at << llendl;
++}
++
++void LLListener_OpenAL::commitDeferredChanges(){
++	ALfloat orientation[6];
++	orientation[0] = mListenAt.mV[0];
++	orientation[1] = mListenAt.mV[1];
++	orientation[2] = mListenAt.mV[2];
++	orientation[3] = mListenUp.mV[0];
++	orientation[4] = mListenUp.mV[1];
++	orientation[5] = mListenUp.mV[2];
++
++	// Why is this backwards?
++	ALfloat velocity[3];
++	velocity[0] = -mVelocity.mV[0];
++	velocity[1] = -mVelocity.mV[1];
++	velocity[2] = -mVelocity.mV[2];
++
++	alListenerfv(AL_ORIENTATION, orientation);
++	alListenerfv(AL_POSITION, mPosition.mV);
++	alListenerfv(AL_VELOCITY, velocity);
++}
++
++void LLListener_OpenAL::setDopplerFactor(F32 factor){
++	// Effect is way too strong by default, scale it down here.
++	// Scaling the speed of sound up causes crashes.
++	factor *= 0.01f;
++	//llinfos << "LLListener_OpenAL::setDopplerFactor() : " << factor << llendl;
++	alDopplerFactor(factor);
++}
++
++F32 LLListener_OpenAL::getDopplerFactor(){
++	ALfloat factor=0;
++	alDopplerFactor(factor);
++	llinfos << "LLListener_OpenAL::getDopplerFactor() : " << factor << llendl;
++	return factor;
++}
++
+diff --git a/indra/llaudio/listener_openal.h b/indra/llaudio/listener_openal.h
+index cc4bb9e..0a8bb6f 100644
+--- a/indra/llaudio/listener_openal.h
++++ b/indra/llaudio/listener_openal.h
+@@ -54,6 +54,10 @@ class LLListener_OpenAL  : public LLListener
+ 	virtual void setPosition(LLVector3 pos);
+ 	virtual void setVelocity(LLVector3 vel);
+ 	virtual void orient(LLVector3 up, LLVector3 at);
++	virtual void commitDeferredChanges();
++
++	virtual void setDopplerFactor(F32 factor);
++	virtual F32 getDopplerFactor();
+ };
+ 
+ #endif
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..f1a2e02 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -9,6 +9,7 @@ include(DBusGlib)
+ include(DirectX)
+ include(ELFIO)
+ include(FMOD)
++include(OPENAL)
+ include(FindOpenGL)
+ include(LLAudio)
+ include(LLCharacter)
+@@ -57,6 +58,7 @@ include_directories(
+     ${LLXML_INCLUDE_DIRS}
+     ${LSCRIPT_INCLUDE_DIRS}
+     ${LSCRIPT_INCLUDE_DIRS}/lscript_compile
++    ${GSTREAMER_INCLUDE_DIRS}
+     )
+ 
+ set(viewer_SOURCE_FILES
+@@ -1246,6 +1248,10 @@ set_source_files_properties(${viewer_CHARACTER_FILES}
+ 
+ list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
+ 
++if (OPENAL)
++  set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS -DLL_OPENAL)
++endif (OPENAL)
++
+ if (WINDOWS)
+   file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi)
+ 
+diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
+index 2ce111f..2a5c5ff 100644
+--- a/indra/newview/llstartup.cpp
++++ b/indra/newview/llstartup.cpp
+@@ -17,7 +17,7 @@
+  * 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
++ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexceptionOP
+  * 
+  * By copying, modifying or distributing this software, you acknowledge
+  * that you have read and understood your obligations described above,
+@@ -45,6 +45,10 @@
+ # include "audioengine_fmod.h"
+ #endif
+ 
++#ifdef LL_OPENAL
++#include "audioengine_openal.h"
++#endif
++
+ #include "llares.h"
+ #include "llcachename.h"
+ #include "llviewercontrol.h"
+@@ -581,10 +585,14 @@ bool idle_startup()
+ 
+ 		if (FALSE == gSavedSettings.getBOOL("NoAudio"))
+ 		{
++			gAudiop = NULL;
++
+ #ifdef LL_FMOD
+ 			gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD();
+-#else
+-			gAudiop = NULL;
++#endif
++
++#ifdef LL_OPENAL
++			gAudiop = (LLAudioEngine *) new LLAudioEngine_OpenAL();
+ #endif
+ 
+ 			if (gAudiop)
+-- 
+tg: (c8fb40a..) topic/features/jira-sent/openal_1.21.0 (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-backported/VWR-3766_llGetInventoryNumber_tooltip_missing_INVENTORY_ANIMATION.diff b/debian/patches/topic/fixes/jira-backported/VWR-3766_llGetInventoryNumber_tooltip_missing_INVENTORY_ANIMATION.diff
new file mode 100644
index 0000000..9f8ad30
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-backported/VWR-3766_llGetInventoryNumber_tooltip_missing_INVENTORY_ANIMATION.diff
@@ -0,0 +1,26 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-backported/VWR-3766_llGetInventoryNumber_tooltip_missing_INVENTORY_ANIMATION
+
+Apply correct tooltips for script editing, adding some missing defines
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/lscript/lscript_library/lscript_library.cpp |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp
+index 505b123..41ed444 100644
+--- a/indra/lscript/lscript_library/lscript_library.cpp
++++ b/indra/lscript/lscript_library/lscript_library.cpp
+@@ -221,7 +221,7 @@ void LLScriptLibrary::init()
+ 	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llBreakAllLinks", NULL, NULL, "llBreakAllLinks()\nDelinks all tasks in the link set (requires permission PERMISSION_CHANGE_LINKS be set)"));
+ 	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetLinkKey", "k", "i", "key llGetLinkKey(integer linknum)\nGet the key of linknumber in link set"));
+ 	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetLinkName", "s", "i", "string llGetLinkName(integer linknum)\nGet the name of linknumber in link set"));
+-	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetInventoryNumber", "i", "i", "integer llGetInventoryNumber(integer type)\nGet the number of items of a given type in the task's inventory.\nValid types: INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_OBJECT, INVENTORY_SCRIPT, INVENTORY_CLOTHING, INVENTORY_BODYPART, INVENTORY_NOTECARD, INVENTORY_LANDMARK, INVENTORY_ALL"));
++	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetInventoryNumber", "i", "i", "integer llGetInventoryNumber(integer type)\nGet the number of items of a given type in the task's inventory.\nValid types: INVENTORY_TEXTURE, INVENTORY_SOUND, INVENTORY_OBJECT, INVENTORY_SCRIPT, INVENTORY_CLOTHING, INVENTORY_BODYPART, INVENTORY_NOTECARD, INVENTORY_LANDMARK, INVENTORY_ANIMATION, INVENTORY_GESTURE, INVENTORY_ALL"));
+ 	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetInventoryName", "s", "ii", "string llGetInventoryName(integer type, integer number)\nGet the name of the inventory item number of type"));
+ 	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetScriptState", NULL, "si", "llSetScriptState(string name, integer run)\nControl the state of a script name."));
+ 	addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetEnergy", "f", NULL, "float llGetEnergy()\nReturns how much energy is in the object as a percentage of maximum"));
+-- 
+tg: (c8fb40a..) topic/fixes/jira-backported/VWR-3766_llGetInventoryNumber_tooltip_missing_INVENTORY_ANIMATION (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-backported/VWR5717_text_not_replaced_by_input_with_japanses_im.diff b/debian/patches/topic/fixes/jira-backported/VWR5717_text_not_replaced_by_input_with_japanses_im.diff
new file mode 100644
index 0000000..5d324dc
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-backported/VWR5717_text_not_replaced_by_input_with_japanses_im.diff
@@ -0,0 +1,70 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-backported/VWR5717_text_not_replaced_by_input_with_japanses_im
+
+Fix to allow Japanese input, taken from VWR-5717
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llui/lllineeditor.cpp |   12 +++++++++---
+ indra/llui/lltexteditor.cpp |   12 +++++++++---
+ 2 files changed, 18 insertions(+), 6 deletions(-)
+
+diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
+index a0af463..9f543e8 100644
+--- a/indra/llui/lllineeditor.cpp
++++ b/indra/llui/lllineeditor.cpp
+@@ -2370,14 +2370,20 @@ BOOL LLLineEditor::hasPreeditString() const
+ 
+ void LLLineEditor::resetPreedit()
+ {
+-	if (hasPreeditString())
++	if (hasSelection())
+ 	{
+-		if (hasSelection())
++		if (hasPreeditString())
+ 		{
+ 			llwarns << "Preedit and selection!" << llendl;
+ 			deselect();
+ 		}
+-
++		else
++		{
++			deleteSelection();
++		}
++	}
++	if (hasPreeditString())
++	{
+ 		const S32 preedit_pos = mPreeditPositions.front();
+ 		mText.erase(preedit_pos, mPreeditPositions.back() - preedit_pos);
+ 		mText.insert(preedit_pos, mPreeditOverwrittenWString);
+diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
+index 4b0acf8..847545f 100644
+--- a/indra/llui/lltexteditor.cpp
++++ b/indra/llui/lltexteditor.cpp
+@@ -4410,14 +4410,20 @@ BOOL LLTextEditor::hasPreeditString() const
+ 
+ void LLTextEditor::resetPreedit()
+ {
+-	if (hasPreeditString())
++	if (hasSelection())
+ 	{
+-		if (hasSelection())
++		if (hasPreeditString())
+ 		{
+ 			llwarns << "Preedit and selection!" << llendl;
+ 			deselect();
+ 		}
+-
++		else
++		{
++			deleteSelection(FALSE);
++		}
++	}
++	if (hasPreeditString())
++	{
+ 		mCursorPos = mPreeditPositions.front();
+ 		removeStringNoUndo(mCursorPos, mPreeditPositions.back() - mCursorPos);
+ 		insertStringNoUndo(mCursorPos, mPreeditOverwrittenWString);
+-- 
+tg: (c8fb40a..) topic/fixes/jira-backported/VWR5717_text_not_replaced_by_input_with_japanses_im (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-backported/glh_linear.diff b/debian/patches/topic/fixes/jira-backported/glh_linear.diff
new file mode 100644
index 0000000..8f5eef0
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-backported/glh_linear.diff
@@ -0,0 +1,1640 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/fixes/jira-backported/glh_linear
+
+Adds the missing glh_linear.h header.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/llwindow/glh/glh_linear.h | 1621 +++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 1621 insertions(+), 0 deletions(-)
+
+diff --git a/indra/llwindow/glh/glh_linear.h b/indra/llwindow/glh/glh_linear.h
+new file mode 100644
+index 0000000..04ae1bd
+--- /dev/null
++++ b/indra/llwindow/glh/glh_linear.h
+@@ -0,0 +1,1621 @@
++/*
++    glh - is a platform-indepenedent C++ OpenGL helper library 
++
++
++    Copyright (c) 2000 Cass Everitt
++	Copyright (c) 2000 NVIDIA Corporation
++    All rights reserved.
++
++    Redistribution and use in source and binary forms, with or
++	without modification, are permitted provided that the following
++	conditions are met:
++
++     * Redistributions of source code must retain the above
++	   copyright notice, this list of conditions and the following
++	   disclaimer.
++
++     * Redistributions in binary form must reproduce the above
++	   copyright notice, this list of conditions and the following
++	   disclaimer in the documentation and/or other materials
++	   provided with the distribution.
++
++     * The names of contributors to this software may not be used
++	   to endorse or promote products derived from this software
++	   without specific prior written permission. 
++
++       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++	   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++	   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
++	   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++	   REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
++	   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
++	   BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++	   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++	   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++	   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
++	   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
++	   POSSIBILITY OF SUCH DAMAGE. 
++
++
++    Cass Everitt - cass at r3.nu
++*/
++
++/*
++glh_linear.h
++*/
++
++// Author:  Cass W. Everitt
++
++#ifndef GLH_LINEAR_H
++#define GLH_LINEAR_H
++
++#include <memory.h>
++#include <math.h>
++#include <assert.h>
++
++// only supports float for now...
++#define GLH_REAL_IS_FLOAT
++
++#ifdef GLH_REAL_IS_FLOAT
++# define GLH_REAL float
++# define GLH_REAL_NAMESPACE ns_float
++#endif
++
++#define     GLH_QUATERNION_NORMALIZATION_THRESHOLD  64
++
++#define     GLH_RAD_TO_DEG      GLH_REAL(57.2957795130823208767981548141052)
++#define     GLH_DEG_TO_RAD      GLH_REAL(0.0174532925199432957692369076848861)
++#define     GLH_ZERO            GLH_REAL(0.0)
++#define     GLH_ONE             GLH_REAL(1.0)
++#define     GLH_TWO             GLH_REAL(2.0)
++#define     GLH_EPSILON         GLH_REAL(10e-6)
++#define     GLH_PI              GLH_REAL(3.1415926535897932384626433832795)    
++
++#define     equivalent(a,b)     (((a < b + GLH_EPSILON) && (a > b - GLH_EPSILON)) ? true : false)
++
++namespace glh
++{
++
++	inline GLH_REAL to_degrees(GLH_REAL radians) { return radians*GLH_RAD_TO_DEG; }
++	inline GLH_REAL to_radians(GLH_REAL degrees) { return degrees*GLH_DEG_TO_RAD; }
++
++	// forward declarations for friend template functions.
++	template <int N, class T> class vec;
++	
++	// forward declarations for friend template functions.
++	template <int N, class T>
++		bool operator == ( const vec<N,T> & v1, const vec<N,T> & v2 );
++	
++	// forward declarations for friend template functions.
++	template <int N, class T>
++		bool operator != ( const vec<N,T> & v1, const vec<N,T> & v2 );
++
++	template <int N, class T>	
++	class vec
++	{				
++    public:
++		int size() const { return N; }
++		
++		vec(const T & t = T()) 
++		{ for(int i = 0; i < N; i++) v[i] = t; }
++		vec(const T * tp)
++		{ for(int i = 0; i < N; i++) v[i] = tp[i]; }
++		
++		const T * get_value() const
++		{ return v; }
++		
++		
++		T dot( const vec<N,T> & rhs ) const
++		{ 
++			T r = 0;
++			for(int i = 0; i < N; i++) r += v[i]*rhs.v[i];
++			return r;
++		}
++		
++		T length() const
++		{
++			T r = 0;
++			for(int i = 0; i < N; i++) r += v[i]*v[i]; 
++			return T(sqrt(r));
++		}	
++		
++		T square_norm() const
++		{
++			T r = 0;
++			for(int i = 0; i < N; i++) r += v[i]*v[i]; 
++			return r;
++		}	
++		
++		void  negate()
++		{ for(int i = 0; i < N; i++) v[i] = -v[i]; }
++		
++		
++		T normalize() 
++		{ 
++			T sum(0);
++			for(int i = 0; i < N; i++) 
++                sum += v[i]*v[i];
++			sum = T(sqrt(sum));
++            if (sum > GLH_EPSILON)
++			    for(int i = 0; i < N; i++) 
++                    v[i] /= sum;
++			return sum;
++		}
++		
++		
++		vec<N,T> & set_value( const T * rhs )
++		{ for(int i = 0; i < N; i++) v[i] = rhs[i]; return *this; }
++		
++		T & operator [] ( int i )
++		{ return v[i]; }
++		
++		const T & operator [] ( int i ) const
++		{ return v[i]; }
++
++		vec<N,T> & operator *= ( T d )
++		{ for(int i = 0; i < N; i++) v[i] *= d; return *this;}
++		
++		vec<N,T> & operator *= ( const vec<N,T> & u )
++		{ for(int i = 0; i < N; i++) v[i] *= u[i]; return *this;}
++		
++		vec<N,T> & operator /= ( T d )
++		{ if(d == 0) return *this; for(int i = 0; i < N; i++) v[i] /= d; return *this;}
++		
++		vec<N,T> & operator += ( const vec<N,T> & u )
++		{ for(int i = 0; i < N; i++) v[i] += u.v[i]; return *this;}
++		
++		vec<N,T> & operator -= ( const vec<N,T> & u )
++		{ for(int i = 0; i < N; i++) v[i] -= u.v[i]; return *this;}
++		
++		
++		vec<N,T> operator - () const
++		{ vec<N,T> rv = v; rv.negate(); return rv; }
++		
++		vec<N,T> operator + ( const vec<N,T> &v) const
++		{ vec<N,T> rt(*this); return rt += v; }
++		
++		vec<N,T> operator - ( const vec<N,T> &v) const
++		{ vec<N,T> rt(*this); return rt -= v; }
++		
++		vec<N,T> operator * ( T d) const
++		{ vec<N,T> rt(*this); return rt *= d; }
++		
++		friend bool operator == <> ( const vec<N,T> &v1, const vec<N,T> &v2 );
++		friend bool operator != <> ( const vec<N,T> &v1, const vec<N,T> &v2 );
++		
++		
++	//protected:
++		T v[N];
++	};
++	
++	
++	
++	// vector friend operators
++	
++	template <int N, class T> inline
++		vec<N,T> operator * ( const vec<N,T> & b, T d )
++	{
++		vec<N,T> rt(b);
++		return rt *= d;
++	}
++
++	template <int N, class T> inline
++		vec<N,T> operator * ( T d, const vec<N,T> & b )
++	{ return b*d; }
++	
++	template <int N, class T> inline
++		vec<N,T> operator * ( const vec<N,T> & b, const vec<N,T> & d )
++	{
++		vec<N,T> rt(b);
++		return rt *= d;
++	}
++
++	template <int N, class T> inline
++		vec<N,T> operator / ( const vec<N,T> & b, T d )
++	{ vec<N,T> rt(b); return rt /= d; }
++	
++	template <int N, class T> inline
++		vec<N,T> operator + ( const vec<N,T> & v1, const vec<N,T> & v2 )
++	{ vec<N,T> rt(v1); return rt += v2; }
++	
++	template <int N, class T> inline
++		vec<N,T> operator - ( const vec<N,T> & v1, const vec<N,T> & v2 )
++	{ vec<N,T> rt(v1); return rt -= v2; }
++	
++	
++	template <int N, class T> inline
++		bool operator == ( const vec<N,T> & v1, const vec<N,T> & v2 )
++	{
++		for(int i = 0; i < N; i++)
++			if(v1.v[i] != v2.v[i])
++				return false;
++			return true;
++	}
++	
++	template <int N, class T> inline
++		bool operator != ( const vec<N,T> & v1, const vec<N,T> & v2 )
++	{ return !(v1 == v2); }
++	
++
++	typedef vec<3,unsigned char> vec3ub;
++	typedef vec<4,unsigned char> vec4ub;
++
++
++
++
++
++	namespace GLH_REAL_NAMESPACE
++	{
++	typedef GLH_REAL real;
++
++	class line;
++	class plane;
++	class matrix4;
++	class quaternion;
++	typedef quaternion rotation; 
++  
++	class vec2 : public vec<2,real>
++	{
++    public:
++		vec2(const real & t = real()) : vec<2,real>(t)
++		{}
++		vec2(const vec<2,real> & t) : vec<2,real>(t)
++		{}
++		vec2(const real * tp) : vec<2,real>(tp)
++		{}
++		
++		vec2(real x, real y )
++		{ v[0] = x; v[1] = y; }
++		
++		void get_value(real & x, real & y) const
++		{ x = v[0]; y = v[1]; }
++		
++		vec2 & set_value( const real & x, const real & y)
++		{ v[0] = x; v[1] = y; return *this; }
++		
++	};
++	
++	
++	class vec3 : public vec<3,real>
++	{
++    public:
++		vec3(const real & t = real()) : vec<3,real>(t)
++		{}
++		vec3(const vec<3,real> & t) : vec<3,real>(t)
++		{}
++		vec3(const real * tp) : vec<3,real>(tp)
++		{}
++		
++		vec3(real x, real y, real z)
++		{ v[0] = x; v[1] = y; v[2] = z; }
++		
++		void get_value(real & x, real & y, real & z) const
++		{ x = v[0]; y = v[1]; z = v[2]; }
++		
++		vec3 cross( const vec3 &rhs ) const
++		{
++			vec3 rt;
++			rt.v[0] = v[1]*rhs.v[2]-v[2]*rhs.v[1];
++			rt.v[1] = v[2]*rhs.v[0]-v[0]*rhs.v[2];
++			rt.v[2] = v[0]*rhs.v[1]-v[1]*rhs.v[0];	
++			return rt;
++		}
++		
++		vec3 & set_value( const real & x, const real & y, const real & z)
++		{ v[0] = x; v[1] = y; v[2] = z; return *this; }
++		
++	};
++
++  		
++    class vec4 : public vec<4,real>
++    {
++    public:
++        vec4(const real & t = real()) : vec<4,real>(t)
++        {}
++        vec4(const vec<4,real> & t) : vec<4,real>(t)
++        {}
++
++        vec4(const vec<3,real> & t, real fourth)
++
++        { v[0] = t.v[0]; v[1] = t.v[1]; v[2] = t.v[2]; v[3] = fourth; }
++        vec4(const real * tp) : vec<4,real>(tp)
++        {}
++        vec4(real x, real y, real z, real w)
++        { v[0] = x; v[1] = y; v[2] = z; v[3] = w; }
++
++        void get_value(real & x, real & y, real & z, real & w) const
++        { x = v[0]; y = v[1]; z = v[2]; w = v[3]; }
++  
++        vec4 & set_value( const real & x, const real & y, const real & z, const real & w)
++        { v[0] = x; v[1] = y; v[2] = z; v[3] = w; return *this; }
++    };
++
++    inline
++    vec3 homogenize(const vec4 & v)
++    {
++      vec3 rt;
++      assert(v.v[3] != GLH_ZERO);
++      rt.v[0] = v.v[0]/v.v[3];
++      rt.v[1] = v.v[1]/v.v[3];
++      rt.v[2] = v.v[2]/v.v[3];
++      return rt;
++    }
++  
++
++
++    class line
++    {
++    public:
++  
++        line()
++        { set_value(vec3(0,0,0),vec3(0,0,1)); }
++
++        line( const vec3 & p0, const vec3 &p1)
++        { set_value(p0,p1); }
++
++        void set_value( const vec3 &p0, const vec3 &p1)
++        {
++          position = p0;
++          direction = p1-p0;
++          direction.normalize();
++        }
++  
++        bool get_closest_points(const line &line2, 
++					          vec3 &pointOnThis,
++					          vec3 &pointOnThat)
++        {
++  
++          // quick check to see if parallel -- if so, quit.
++          if(fabs(direction.dot(line2.direction)) == 1.0)
++	          return 0;
++          line l2 = line2;
++  
++          // Algorithm: Brian Jean
++          // 
++          register real u;
++          register real v;
++          vec3 Vr = direction;
++          vec3 Vs = l2.direction;
++          register real Vr_Dot_Vs = Vr.dot(Vs);
++          register real detA = real(1.0 - (Vr_Dot_Vs * Vr_Dot_Vs));
++          vec3 C = l2.position - position;
++          register real C_Dot_Vr =  C.dot(Vr);
++          register real C_Dot_Vs =  C.dot(Vs);
++  
++          u = (C_Dot_Vr - Vr_Dot_Vs * C_Dot_Vs)/detA;
++          v = (C_Dot_Vr * Vr_Dot_Vs - C_Dot_Vs)/detA;
++  
++          pointOnThis = position;
++          pointOnThis += direction * u;
++          pointOnThat = l2.position;
++          pointOnThat += l2.direction * v;
++  
++          return 1;
++        }
++  
++        vec3 get_closest_point(const vec3 &point)
++        {
++          vec3 np = point - position;
++          vec3 rp = direction*direction.dot(np)+position;
++          return rp;
++        }
++  
++        const vec3 & get_position() const {return position;}
++
++        const vec3 & get_direction() const {return direction;}
++  
++    //protected:
++        vec3 position;
++        vec3 direction;
++    };
++  
++  
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++  
++  
++
++
++
++
++
++
++
++
++
++
++
++  // matrix
++
++  
++  class matrix4
++  {
++    
++  public:
++        
++    matrix4() { make_identity(); }
++    
++	matrix4( real r ) 
++	{ set_value(r); }
++
++	matrix4( real * m )
++	{ set_value(m); }
++    
++    matrix4( real a00, real a01, real a02, real a03,
++	       real a10, real a11, real a12, real a13,
++		   real a20, real a21, real a22, real a23,
++		   real a30, real a31, real a32, real a33 )
++	{
++		element(0,0) = a00;
++		element(0,1) = a01;
++		element(0,2) = a02;
++		element(0,3) = a03;
++		
++		element(1,0) = a10;
++		element(1,1) = a11;
++		element(1,2) = a12;
++		element(1,3) = a13;
++		
++		element(2,0) = a20;
++		element(2,1) = a21;
++		element(2,2) = a22;
++		element(2,3) = a23;
++		
++		element(3,0) = a30;
++		element(3,1) = a31;
++		element(3,2) = a32;
++		element(3,3) = a33;
++	}
++            
++    
++    void get_value( real * mp ) const
++	{
++		int c = 0;
++		for(int j=0; j < 4; j++)
++			for(int i=0; i < 4; i++)
++				mp[c++] = element(i,j);
++	}
++    
++    
++    const real * get_value() const
++	{ return m; }
++    
++	void set_value( real * mp)
++	{
++		int c = 0;
++		for(int j=0; j < 4; j++)
++			for(int i=0; i < 4; i++)
++				element(i,j) = mp[c++];
++	}
++    
++	void set_value( real r ) 
++	{
++		for(int i=0; i < 4; i++)
++			for(int j=0; j < 4; j++)
++				element(i,j) = r;
++	}
++    
++    void make_identity()
++	{
++		element(0,0) = 1.0;
++		element(0,1) = 0.0;
++		element(0,2) = 0.0; 
++		element(0,3) = 0.0;
++		
++		element(1,0) = 0.0;
++		element(1,1) = 1.0; 
++		element(1,2) = 0.0;
++		element(1,3) = 0.0;
++		
++		element(2,0) = 0.0;
++		element(2,1) = 0.0;
++		element(2,2) = 1.0;
++		element(2,3) = 0.0;
++		
++		element(3,0) = 0.0; 
++		element(3,1) = 0.0; 
++		element(3,2) = 0.0;
++		element(3,3) = 1.0;
++	}
++	
++	
++    static matrix4 identity()
++	{
++		static matrix4 mident (
++			1.0, 0.0, 0.0, 0.0,
++			0.0, 1.0, 0.0, 0.0,
++			0.0, 0.0, 1.0, 0.0,
++			0.0, 0.0, 0.0, 1.0  );
++		return mident;
++	}
++    
++        
++    void set_scale( real s )
++	{
++		element(0,0) = s;
++		element(1,1) = s;
++		element(2,2) = s;
++	}
++    
++    void set_scale( const vec3 & s )
++	{
++		element(0,0) = s.v[0];
++		element(1,1) = s.v[1];
++		element(2,2) = s.v[2];
++	}
++    
++    
++    void set_translate( const vec3 & t )
++	{
++		element(0,3) = t.v[0];
++		element(1,3) = t.v[1];
++		element(2,3) = t.v[2];
++	}
++    
++	void set_row(int r, const vec4 & t)
++	{
++		element(r,0) = t.v[0];
++		element(r,1) = t.v[1];
++		element(r,2) = t.v[2];
++		element(r,3) = t.v[3];
++	}
++
++	void set_column(int c, const vec4 & t)
++	{
++		element(0,c) = t.v[0];
++		element(1,c) = t.v[1];
++		element(2,c) = t.v[2];
++		element(3,c) = t.v[3];
++	}
++
++    
++	void get_row(int r, vec4 & t) const
++	{
++		t.v[0] = element(r,0);
++		t.v[1] = element(r,1);
++		t.v[2] = element(r,2);
++		t.v[3] = element(r,3);
++	}
++
++	vec4 get_row(int r) const
++	{
++		vec4 v; get_row(r, v);
++		return v;
++	}
++
++	void get_column(int c, vec4 & t) const
++	{
++		t.v[0] = element(0,c);
++		t.v[1] = element(1,c);
++		t.v[2] = element(2,c);
++		t.v[3] = element(3,c);
++	}
++
++	vec4 get_column(int c) const
++	{
++		vec4 v; get_column(c, v);
++		return v;
++	}
++
++    matrix4 inverse() const
++	{
++		matrix4 minv;
++		
++		real r1[8], r2[8], r3[8], r4[8];
++		real *s[4], *tmprow;
++		
++		s[0] = &r1[0];
++		s[1] = &r2[0];
++		s[2] = &r3[0];
++		s[3] = &r4[0];
++		
++		register int i,j,p,jj;
++		for(i=0;i<4;i++)
++		{
++			for(j=0;j<4;j++)
++			{
++				s[i][j] = element(i,j);
++				if(i==j) s[i][j+4] = 1.0;
++				else     s[i][j+4] = 0.0;
++			}
++		}
++		real scp[4];
++		for(i=0;i<4;i++)
++		{
++			scp[i] = real(fabs(s[i][0]));
++			for(j=1;j<4;j++)
++				if(real(fabs(s[i][j])) > scp[i]) scp[i] = real(fabs(s[i][j]));
++				if(scp[i] == 0.0) return minv; // singular matrix!
++		}
++		
++		int pivot_to;
++		real scp_max;
++		for(i=0;i<4;i++)
++		{
++			// select pivot row
++			pivot_to = i;
++			scp_max = real(fabs(s[i][i]/scp[i]));
++			// find out which row should be on top
++			for(p=i+1;p<4;p++)
++				if(real(fabs(s[p][i]/scp[p])) > scp_max)
++				{ scp_max = real(fabs(s[p][i]/scp[p])); pivot_to = p; }
++				// Pivot if necessary
++				if(pivot_to != i)
++				{
++					tmprow = s[i];
++					s[i] = s[pivot_to];
++					s[pivot_to] = tmprow;
++					real tmpscp;
++					tmpscp = scp[i];
++					scp[i] = scp[pivot_to];
++					scp[pivot_to] = tmpscp;
++				}
++				
++				real mji;
++				// perform gaussian elimination
++				for(j=i+1;j<4;j++)
++				{
++					mji = s[j][i]/s[i][i];
++					s[j][i] = 0.0;
++					for(jj=i+1;jj<8;jj++)
++						s[j][jj] -= mji*s[i][jj];
++				}
++		}
++		if(s[3][3] == 0.0) return minv; // singular matrix!
++		
++		//
++		// Now we have an upper triangular matrix.
++		//
++		//  x x x x | y y y y
++		//  0 x x x | y y y y 
++		//  0 0 x x | y y y y
++		//  0 0 0 x | y y y y
++		//
++		//  we'll back substitute to get the inverse
++		//
++		//  1 0 0 0 | z z z z
++		//  0 1 0 0 | z z z z
++		//  0 0 1 0 | z z z z
++		//  0 0 0 1 | z z z z 
++		//
++		
++		real mij;
++		for(i=3;i>0;i--)
++		{
++			for(j=i-1;j > -1; j--)
++			{
++				mij = s[j][i]/s[i][i];
++				for(jj=j+1;jj<8;jj++)
++					s[j][jj] -= mij*s[i][jj];
++			}
++		}
++		
++		for(i=0;i<4;i++)
++			for(j=0;j<4;j++)
++				minv(i,j) = s[i][j+4] / s[i][i];
++			
++			return minv;
++	}
++    
++    
++    matrix4 transpose() const
++	{
++		matrix4 mtrans;
++		
++		for(int i=0;i<4;i++)
++			for(int j=0;j<4;j++)
++				mtrans(i,j) = element(j,i);		
++		return mtrans;
++	}
++    
++    matrix4 & mult_right( const matrix4 & b )
++	{
++		matrix4 mt(*this);
++		set_value(real(0));
++
++		for(int i=0; i < 4; i++)
++			for(int j=0; j < 4; j++)
++				for(int c=0; c < 4; c++)
++					element(i,j) += mt(i,c) * b(c,j);
++		return *this;
++	}    
++
++    matrix4 & mult_left( const matrix4 & b )
++	{
++		matrix4 mt(*this);
++		set_value(real(0));
++
++		for(int i=0; i < 4; i++)
++			for(int j=0; j < 4; j++)
++				for(int c=0; c < 4; c++)
++					element(i,j) += b(i,c) * mt(c,j);
++		return *this;
++	}
++	
++	// dst = M * src
++    void mult_matrix_vec( const vec3 &src, vec3 &dst ) const
++	{
++		real w = (
++			src.v[0] * element(3,0) +
++			src.v[1] * element(3,1) + 
++			src.v[2] * element(3,2) +
++			element(3,3)          );
++        
++        assert(w != GLH_ZERO);
++
++        dst.v[0]  = (
++			src.v[0] * element(0,0) +
++			src.v[1] * element(0,1) +
++			src.v[2] * element(0,2) +
++			element(0,3)          ) / w;
++		dst.v[1]  = (
++			src.v[0] * element(1,0) +
++			src.v[1] * element(1,1) +
++			src.v[2] * element(1,2) +
++			element(1,3)          ) / w;
++		dst.v[2]  = (
++			src.v[0] * element(2,0) +
++			src.v[1] * element(2,1) + 
++			src.v[2] * element(2,2) +
++			element(2,3)          ) / w;
++	}
++    
++	void mult_matrix_vec( vec3 & src_and_dst) const
++	{ mult_matrix_vec(vec3(src_and_dst), src_and_dst); }
++
++
++    // dst = src * M
++    void mult_vec_matrix( const vec3 &src, vec3 &dst ) const
++	{
++		real w = (
++			src.v[0] * element(0,3) +
++			src.v[1] * element(1,3) +
++			src.v[2] * element(2,3) +
++			element(3,3)          );
++        
++        assert(w != GLH_ZERO);
++
++		dst.v[0]  = (
++			src.v[0] * element(0,0) +
++			src.v[1] * element(1,0) + 
++			src.v[2] * element(2,0) + 
++			element(3,0)          ) / w;
++		dst.v[1]  = (
++			src.v[0] * element(0,1) +
++			src.v[1] * element(1,1) +
++			src.v[2] * element(2,1) +
++			element(3,1)          ) / w;
++		dst.v[2]  = (
++			src.v[0] * element(0,2) +
++			src.v[1] * element(1,2) +
++			src.v[2] * element(2,2) +
++			element(3,2)          ) / w;
++	}
++        
++
++	void mult_vec_matrix( vec3 & src_and_dst) const
++	{ mult_vec_matrix(vec3(src_and_dst), src_and_dst); }
++
++	// dst = M * src
++    void mult_matrix_vec( const vec4 &src, vec4 &dst ) const
++	{
++        dst.v[0]  = (
++			src.v[0] * element(0,0) +
++			src.v[1] * element(0,1) +
++			src.v[2] * element(0,2) +
++			src.v[3] * element(0,3));
++		dst.v[1]  = (
++			src.v[0] * element(1,0) +
++			src.v[1] * element(1,1) +
++			src.v[2] * element(1,2) +
++			src.v[3] * element(1,3));
++		dst.v[2]  = (
++			src.v[0] * element(2,0) +
++			src.v[1] * element(2,1) + 
++			src.v[2] * element(2,2) +
++			src.v[3] * element(2,3));
++		dst.v[3] = (
++			src.v[0] * element(3,0) +
++			src.v[1] * element(3,1) + 
++			src.v[2] * element(3,2) +
++			src.v[3] * element(3,3));
++	}
++    
++	void mult_matrix_vec( vec4 & src_and_dst) const
++	{ mult_matrix_vec(vec4(src_and_dst), src_and_dst); }
++
++
++    // dst = src * M
++    void mult_vec_matrix( const vec4 &src, vec4 &dst ) const
++	{
++		dst.v[0]  = (
++			src.v[0] * element(0,0) +
++			src.v[1] * element(1,0) + 
++			src.v[2] * element(2,0) + 
++			src.v[3] * element(3,0));
++		dst.v[1]  = (
++			src.v[0] * element(0,1) +
++			src.v[1] * element(1,1) +
++			src.v[2] * element(2,1) +
++			src.v[3] * element(3,1));
++		dst.v[2]  = (
++			src.v[0] * element(0,2) +
++			src.v[1] * element(1,2) +
++			src.v[2] * element(2,2) +
++			src.v[3] * element(3,2));
++		dst.v[3] = (
++			src.v[0] * element(0,3) +
++			src.v[1] * element(1,3) +
++			src.v[2] * element(2,3) +
++			src.v[3] * element(3,3));
++	}
++        
++
++	void mult_vec_matrix( vec4 & src_and_dst) const
++	{ mult_vec_matrix(vec4(src_and_dst), src_and_dst); }
++
++    
++    // dst = M * src
++    void mult_matrix_dir( const vec3 &src, vec3 &dst ) const
++	{
++		dst.v[0]  = (
++			src.v[0] * element(0,0) +
++			src.v[1] * element(0,1) +
++			src.v[2] * element(0,2) ) ;
++		dst.v[1]  = ( 
++			src.v[0] * element(1,0) +
++			src.v[1] * element(1,1) +
++			src.v[2] * element(1,2) ) ;
++		dst.v[2]  = ( 
++			src.v[0] * element(2,0) +
++			src.v[1] * element(2,1) + 
++			src.v[2] * element(2,2) ) ;
++	}
++        
++
++	void mult_matrix_dir( vec3 & src_and_dst) const
++	{ mult_matrix_dir(vec3(src_and_dst), src_and_dst); }
++
++
++	// dst = src * M
++    void mult_dir_matrix( const vec3 &src, vec3 &dst ) const
++	{
++		dst.v[0]  = ( 
++			src.v[0] * element(0,0) +
++			src.v[1] * element(1,0) +
++			src.v[2] * element(2,0) ) ;
++		dst.v[1]  = ( 
++			src.v[0] * element(0,1) +
++			src.v[1] * element(1,1) +
++			src.v[2] * element(2,1) ) ;
++		dst.v[2]  = (
++			src.v[0] * element(0,2) +
++			src.v[1] * element(1,2) + 
++			src.v[2] * element(2,2) ) ;
++	}
++    
++    
++	void mult_dir_matrix( vec3 & src_and_dst) const
++	{ mult_dir_matrix(vec3(src_and_dst), src_and_dst); }
++
++
++    real & operator () (int row, int col)
++    { return element(row,col); }
++
++    const real & operator () (int row, int col) const
++    { return element(row,col); }
++
++	real & element (int row, int col)
++    { return m[row | (col<<2)]; }
++
++    const real & element (int row, int col) const
++    { return m[row | (col<<2)]; }
++
++    matrix4 & operator *= ( const matrix4 & mat )
++	{
++		mult_right( mat );
++		return *this;
++	}
++    
++    matrix4 & operator *= ( const real & r )
++	{
++		for (int i = 0; i < 4; ++i)
++        {
++            element(0,i) *= r;
++            element(1,i) *= r;
++            element(2,i) *= r;
++            element(3,i) *= r;
++        }
++		return *this;
++	}
++
++    matrix4 & operator += ( const matrix4 & mat )
++	{
++		for (int i = 0; i < 4; ++i)
++        {
++            element(0,i) += mat.element(0,i);
++            element(1,i) += mat.element(1,i);
++            element(2,i) += mat.element(2,i);
++            element(3,i) += mat.element(3,i);
++        }
++		return *this;
++	}
++
++    friend matrix4 operator * ( const matrix4 & m1,	const matrix4 & m2 );
++    friend bool operator == ( const matrix4 & m1, const matrix4 & m2 );
++    friend bool operator != ( const matrix4 & m1, const matrix4 & m2 );
++    
++  //protected:
++	  real m[16];
++  };
++  
++  inline  
++  matrix4 operator * ( const matrix4 & m1, const matrix4 & m2 )
++  {
++	  matrix4 product;
++	  
++	  product = m1;
++	  product.mult_right(m2);
++	  
++	  return product;
++  }
++  
++  inline
++  bool operator ==( const matrix4 &m1, const matrix4 &m2 )
++  {
++	  return ( 
++		  m1(0,0) == m2(0,0) &&
++		  m1(0,1) == m2(0,1) &&
++		  m1(0,2) == m2(0,2) &&
++		  m1(0,3) == m2(0,3) &&
++		  m1(1,0) == m2(1,0) &&
++		  m1(1,1) == m2(1,1) &&
++		  m1(1,2) == m2(1,2) &&
++		  m1(1,3) == m2(1,3) &&
++		  m1(2,0) == m2(2,0) &&
++		  m1(2,1) == m2(2,1) &&
++		  m1(2,2) == m2(2,2) &&
++		  m1(2,3) == m2(2,3) &&
++		  m1(3,0) == m2(3,0) &&
++		  m1(3,1) == m2(3,1) &&
++		  m1(3,2) == m2(3,2) &&
++		  m1(3,3) == m2(3,3) );
++  }
++  
++  inline
++  bool operator != ( const matrix4 & m1, const matrix4 & m2 )
++  { return !( m1 == m2 ); }  
++
++
++
++
++
++
++
++
++
++
++
++
++  
++    class quaternion
++    {
++    public:
++    
++    quaternion()
++    {
++        *this = identity();
++    }
++
++    quaternion( const real v[4] )
++    {
++        set_value( v );
++    }
++
++
++    quaternion( real q0, real q1, real q2, real q3 )
++    {
++        set_value( q0, q1, q2, q3 );
++    }
++
++
++    quaternion( const matrix4 & m )
++    {
++        set_value( m );
++    }
++
++
++    quaternion( const vec3 &axis, real radians )
++    {
++        set_value( axis, radians );
++    }
++
++
++    quaternion( const vec3 &rotateFrom, const vec3 &rotateTo )
++    {
++        set_value( rotateFrom, rotateTo );
++    }
++
++    quaternion( const vec3 & from_look, const vec3 & from_up,
++		      const vec3 & to_look, const vec3& to_up)
++    {
++	    set_value(from_look, from_up, to_look, to_up);
++    }
++
++    const real * get_value() const
++    {
++        return  &q[0];
++    }
++
++    void get_value( real &q0, real &q1, real &q2, real &q3 ) const
++    {
++        q0 = q[0];
++        q1 = q[1];
++        q2 = q[2];
++        q3 = q[3];
++    }
++
++    quaternion & set_value( real q0, real q1, real q2, real q3 )
++    {
++        q[0] = q0;
++        q[1] = q1;
++        q[2] = q2;
++        q[3] = q3;
++        counter = 0;
++        return *this;
++    }
++
++    void get_value( vec3 &axis, real &radians ) const
++    {
++        radians = real(acos( q[3] ) * GLH_TWO);
++        if ( radians == GLH_ZERO )
++            axis = vec3( 0.0, 0.0, 1.0 );
++        else
++        {
++            axis.v[0] = q[0];
++            axis.v[1] = q[1];
++            axis.v[2] = q[2];
++            axis.normalize();
++        }
++    }
++
++    void get_value( matrix4 & m ) const
++    {
++        real s, xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz;
++
++        real norm = q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3];
++
++        s = (equivalent(norm,GLH_ZERO)) ? GLH_ZERO : ( GLH_TWO / norm );
++
++        xs = q[0] * s;
++        ys = q[1] * s;
++        zs = q[2] * s;
++
++        wx = q[3] * xs;
++        wy = q[3] * ys;
++        wz = q[3] * zs;
++
++        xx = q[0] * xs;
++        xy = q[0] * ys;
++        xz = q[0] * zs;
++
++        yy = q[1] * ys;
++        yz = q[1] * zs;
++        zz = q[2] * zs;
++
++        m(0,0) = real( GLH_ONE - ( yy + zz ));
++        m(1,0) = real ( xy + wz );
++        m(2,0) = real ( xz - wy );
++
++        m(0,1) = real ( xy - wz );
++        m(1,1) = real ( GLH_ONE - ( xx + zz ));
++        m(2,1) = real ( yz + wx );
++
++        m(0,2) = real ( xz + wy );
++        m(1,2) = real ( yz - wx );
++        m(2,2) = real ( GLH_ONE - ( xx + yy ));
++
++        m(3,0) = m(3,1) = m(3,2) = m(0,3) = m(1,3) = m(2,3) = GLH_ZERO;
++        m(3,3) = GLH_ONE;
++    }
++
++    quaternion & set_value( const real * qp )
++    {
++        memcpy(q,qp,sizeof(real) * 4);
++
++        counter = 0;
++        return *this;
++    }
++
++    quaternion & set_value( const matrix4 & m )
++    {
++        real tr, s;
++        int i, j, k;
++        const int nxt[3] = { 1, 2, 0 };
++
++        tr = m(0,0) + m(1,1) + m(2,2);
++
++        if ( tr > GLH_ZERO )
++        {
++            s = real(sqrt( tr + m(3,3) ));
++            q[3] = real ( s * 0.5 );
++            s = real(0.5) / s;
++
++            q[0] = real ( ( m(1,2) - m(2,1) ) * s );
++            q[1] = real ( ( m(2,0) - m(0,2) ) * s );
++            q[2] = real ( ( m(0,1) - m(1,0) ) * s );
++        }
++        else
++        {
++            i = 0;
++            if ( m(1,1) > m(0,0) )
++              i = 1;
++
++            if ( m(2,2) > m(i,i) )
++              i = 2;
++
++            j = nxt[i];
++            k = nxt[j];
++
++            s = real(sqrt( ( m(i,j) - ( m(j,j) + m(k,k) )) + GLH_ONE ));
++
++            q[i] = real ( s * 0.5 );
++            s = real(0.5 / s);
++
++            q[3] = real ( ( m(j,k) - m(k,j) ) * s );
++            q[j] = real ( ( m(i,j) + m(j,i) ) * s );
++            q[k] = real ( ( m(i,k) + m(k,i) ) * s );
++        }
++
++        counter = 0;
++        return *this;
++    }
++
++    quaternion & set_value( const vec3 &axis, real theta )
++    {
++        real sqnorm = axis.square_norm();
++
++        if (sqnorm <= GLH_EPSILON)
++        {
++            // axis too small.
++            x = y = z = 0.0;
++            w = 1.0;
++        } 
++        else 
++        {
++            theta *= real(0.5);
++            real sin_theta = real(sin(theta));
++
++            if (!equivalent(sqnorm,GLH_ONE)) 
++              sin_theta /= real(sqrt(sqnorm));
++            x = sin_theta * axis.v[0];
++            y = sin_theta * axis.v[1];
++            z = sin_theta * axis.v[2];
++            w = real(cos(theta));
++        }
++        return *this;
++    }
++
++    quaternion & set_value( const vec3 & rotateFrom, const vec3 & rotateTo )
++    {
++        vec3 p1, p2;
++        real alpha;
++
++        p1 = rotateFrom; 
++        p1.normalize();
++        p2 = rotateTo;  
++        p2.normalize();
++
++        alpha = p1.dot(p2);
++
++        if(equivalent(alpha,GLH_ONE))
++        { 
++            *this = identity(); 
++            return *this; 
++        }
++
++        // ensures that the anti-parallel case leads to a positive dot
++        if(equivalent(alpha,-GLH_ONE))
++        {
++            vec3 v;
++
++            if(p1.v[0] != p1.v[1] || p1.v[0] != p1.v[2])
++    	        v = vec3(p1.v[1], p1.v[2], p1.v[0]);
++            else
++    	        v = vec3(-p1.v[0], p1.v[1], p1.v[2]);
++
++            v -= p1 * p1.dot(v);
++            v.normalize();
++
++            set_value(v, GLH_PI);
++            return *this;
++        }
++
++        p1 = p1.cross(p2);  
++        p1.normalize();
++        set_value(p1,real(acos(alpha)));
++
++        counter = 0;
++        return *this;
++    }
++
++    quaternion & set_value( const vec3 & from_look, const vec3 & from_up,
++		      const vec3 & to_look, const vec3 & to_up)
++    {
++	    quaternion r_look = quaternion(from_look, to_look);
++	    
++	    vec3 rotated_from_up(from_up);
++	    r_look.mult_vec(rotated_from_up);
++	    
++	    quaternion r_twist = quaternion(rotated_from_up, to_up);
++	    
++	    *this = r_twist;
++	    *this *= r_look;
++	    return *this;
++    }
++
++    quaternion & operator *= ( const quaternion & qr )
++    {
++        quaternion ql(*this);
++   
++        w = ql.w * qr.w - ql.x * qr.x - ql.y * qr.y - ql.z * qr.z;
++        x = ql.w * qr.x + ql.x * qr.w + ql.y * qr.z - ql.z * qr.y;
++        y = ql.w * qr.y + ql.y * qr.w + ql.z * qr.x - ql.x * qr.z;
++        z = ql.w * qr.z + ql.z * qr.w + ql.x * qr.y - ql.y * qr.x;
++
++        counter += qr.counter;
++        counter++;
++        counter_normalize();
++        return *this;
++    }
++
++    void normalize()
++    {
++        real rnorm = GLH_ONE / real(sqrt(w * w + x * x + y * y + z * z));
++        if (equivalent(rnorm, GLH_ZERO))
++            return;
++        x *= rnorm;
++        y *= rnorm;
++        z *= rnorm;
++        w *= rnorm;
++        counter = 0;
++    }
++
++    friend bool operator == ( const quaternion & q1, const quaternion & q2 );      
++
++    friend bool operator != ( const quaternion & q1, const quaternion & q2 );
++
++    friend quaternion operator * ( const quaternion & q1, const quaternion & q2 );
++
++    bool equals( const quaternion & r, real tolerance ) const
++    {
++        real t;
++
++        t = (
++			(q[0]-r.q[0])*(q[0]-r.q[0]) +
++            (q[1]-r.q[1])*(q[1]-r.q[1]) +
++            (q[2]-r.q[2])*(q[2]-r.q[2]) +
++            (q[3]-r.q[3])*(q[3]-r.q[3]) );
++        if(t > GLH_EPSILON) 
++            return false;
++        return 1;
++    }
++
++    quaternion & conjugate()
++    {
++        q[0] *= -GLH_ONE;
++        q[1] *= -GLH_ONE;
++        q[2] *= -GLH_ONE;
++        return *this;
++    }
++
++    quaternion & invert()
++    {
++        return conjugate();
++    }
++
++    quaternion inverse() const
++    {
++        quaternion r = *this;
++        return r.invert();
++    }
++
++    //
++    // Quaternion multiplication with cartesian vector
++    // v' = q*v*q(star)
++    //
++    void mult_vec( const vec3 &src, vec3 &dst ) const
++    {
++        real v_coef = w * w - x * x - y * y - z * z;                     
++        real u_coef = GLH_TWO * (src.v[0] * x + src.v[1] * y + src.v[2] * z);  
++        real c_coef = GLH_TWO * w;                                       
++
++        dst.v[0] = v_coef * src.v[0] + u_coef * x + c_coef * (y * src.v[2] - z * src.v[1]);
++        dst.v[1] = v_coef * src.v[1] + u_coef * y + c_coef * (z * src.v[0] - x * src.v[2]);
++        dst.v[2] = v_coef * src.v[2] + u_coef * z + c_coef * (x * src.v[1] - y * src.v[0]);
++    }
++
++    void mult_vec( vec3 & src_and_dst) const
++    {
++        mult_vec(vec3(src_and_dst), src_and_dst);
++    }
++
++    void scale_angle( real scaleFactor )
++    {
++        vec3 axis;
++        real radians;
++
++        get_value(axis, radians);
++        radians *= scaleFactor;
++        set_value(axis, radians);
++    }
++
++    static quaternion slerp( const quaternion & p, const quaternion & q, real alpha )
++    {
++        quaternion r;
++
++        real cos_omega = p.x * q.x + p.y * q.y + p.z * q.z + p.w * q.w;
++        // if B is on opposite hemisphere from A, use -B instead
++      
++        int bflip;
++        if ( ( bflip = (cos_omega < GLH_ZERO)) )
++            cos_omega = -cos_omega;
++
++        // complementary interpolation parameter
++        real beta = GLH_ONE - alpha;     
++
++        if(cos_omega <= GLH_ONE - GLH_EPSILON)
++            return p;
++
++        real omega = real(acos(cos_omega));
++        real one_over_sin_omega = GLH_ONE / real(sin(omega));
++
++        beta    = real(sin(omega*beta)  * one_over_sin_omega);
++        alpha   = real(sin(omega*alpha) * one_over_sin_omega);
++
++        if (bflip)
++            alpha = -alpha;
++
++        r.x = beta * p.q[0]+ alpha * q.q[0];
++        r.y = beta * p.q[1]+ alpha * q.q[1];
++        r.z = beta * p.q[2]+ alpha * q.q[2];
++        r.w = beta * p.q[3]+ alpha * q.q[3];
++        return r;
++    }
++
++    static quaternion identity()
++    {
++        static quaternion ident( vec3( 0.0, 0.0, 0.0 ), GLH_ONE );
++        return ident;
++    }
++
++    real & operator []( int i )
++    {
++        assert(i < 4);
++        return q[i];
++    }
++
++    const real & operator []( int i ) const
++    {
++        assert(i < 4);
++        return q[i];
++    }
++
++    protected:
++
++        void counter_normalize()
++        {
++            if (counter > GLH_QUATERNION_NORMALIZATION_THRESHOLD)
++                normalize();
++        }
++
++        union 
++        {
++            struct 
++            {
++                real q[4];
++            };
++            struct 
++            {
++                real x;
++                real y;
++                real z;
++                real w;
++            };
++        };
++
++        // renormalization counter
++        unsigned char counter;
++    };
++
++    inline
++    bool operator == ( const quaternion & q1, const quaternion & q2 )
++    {
++        return (equivalent(q1.x, q2.x) &&
++		        equivalent(q1.y, q2.y) &&
++		        equivalent(q1.z, q2.z) &&
++		        equivalent(q1.w, q2.w) );
++    }
++
++    inline
++    bool operator != ( const quaternion & q1, const quaternion & q2 )
++    { 
++        return ! ( q1 == q2 ); 
++    }
++
++    inline
++    quaternion operator * ( const quaternion & q1, const quaternion & q2 )
++    {	
++        quaternion r(q1); 
++        r *= q2; 
++        return r; 
++    }
++  
++      
++    
++
++
++
++
++
++  
++  
++  class plane
++  {
++  public:
++	  
++	  plane()
++      {
++		  planedistance = 0.0;
++		  planenormal.set_value( 0.0, 0.0, 1.0 );
++      }
++	  
++	  
++	  plane( const vec3 &p0, const vec3 &p1, const vec3 &p2 )
++      {
++		  vec3 v0 = p1 - p0;
++		  vec3 v1 = p2 - p0;
++		  planenormal = v0.cross(v1);  
++		  planenormal.normalize();
++		  planedistance = p0.dot(planenormal);
++      }
++	  
++	  plane( const vec3 &normal, real distance )
++      {
++		  planedistance = distance;
++		  planenormal = normal;
++		  planenormal.normalize();
++      }
++	  
++	  plane( const vec3 &normal, const vec3 &point )
++      {
++		  planenormal = normal;
++		  planenormal.normalize();
++		  planedistance = point.dot(planenormal);
++      }
++	  
++	  void offset( real d )
++      {
++		  planedistance += d;
++      }
++	  
++	  bool intersect( const line &l, vec3 &intersection ) const
++      {
++		  vec3 pos, dir;
++		  vec3 pn = planenormal;
++		  real pd = planedistance;
++		  
++		  pos = l.get_position();
++		  dir = l.get_direction();
++		  
++		  if(dir.dot(pn) == 0.0) return 0;
++		  pos -= pn*pd;
++		  // now we're talking about a plane passing through the origin
++		  if(pos.dot(pn) < 0.0) pn.negate();
++		  if(dir.dot(pn) > 0.0) dir.negate();
++		  vec3 ppos = pn * pos.dot(pn);
++		  pos = (ppos.length()/dir.dot(-pn))*dir;
++		  intersection = l.get_position();
++		  intersection += pos;
++		  return 1;
++      }
++	  void transform( const matrix4 &matrix )
++      {
++		  matrix4 invtr = matrix.inverse();
++		  invtr = invtr.transpose();
++		  
++		  vec3 pntOnplane = planenormal * planedistance;
++		  vec3 newPntOnplane;
++		  vec3 newnormal;
++		  
++		  invtr.mult_dir_matrix(planenormal, newnormal);
++		  matrix.mult_vec_matrix(pntOnplane, newPntOnplane);
++		  
++		  newnormal.normalize();
++		  planenormal = newnormal;
++		  planedistance = newPntOnplane.dot(planenormal);
++      }
++	  
++	  bool is_in_half_space( const vec3 &point ) const
++      {
++		  
++		  if(( point.dot(planenormal) - planedistance) < 0.0)
++			  return 0;
++		  return 1;
++      }
++	  
++	  
++	  real distance( const vec3 & point ) const 
++      {
++		  return planenormal.dot(point - planenormal*planedistance);
++      }
++	  
++	  const vec3 &get_normal() const
++      {
++		  return planenormal;
++      }
++	  
++	  
++	  real get_distance_from_origin() const
++      {
++		  return planedistance;
++      }
++	  
++	  
++	  friend bool operator == ( const plane & p1, const plane & p2 );
++	  
++	  
++	  friend bool operator != ( const plane & p1, const plane & p2 );
++	  
++  //protected:
++	  vec3 planenormal;
++	  real planedistance;
++  };
++  
++  inline
++  bool operator == (const plane & p1, const plane & p2 )
++  {
++	  return (  p1.planedistance == p2.planedistance && p1.planenormal == p2.planenormal);
++  }
++  
++  inline
++  bool operator != ( const plane & p1, const plane & p2 )
++  { return  ! (p1 == p2); }
++  
++  
++
++  } // "ns_##GLH_REAL"
++
++  // make common typedefs...
++#ifdef GLH_REAL_IS_FLOAT
++  typedef GLH_REAL_NAMESPACE::vec2 vec2f;
++  typedef GLH_REAL_NAMESPACE::vec3 vec3f;
++  typedef GLH_REAL_NAMESPACE::vec4 vec4f;
++  typedef GLH_REAL_NAMESPACE::quaternion quaternionf;
++  typedef GLH_REAL_NAMESPACE::quaternion rotationf;
++  typedef GLH_REAL_NAMESPACE::line linef;
++  typedef GLH_REAL_NAMESPACE::plane planef;
++  typedef GLH_REAL_NAMESPACE::matrix4 matrix4f;
++#endif
++
++  
++
++
++}  // namespace glh
++
++
++
++#endif
++
+-- 
+tg: (c8fb40a..) topic/fixes/jira-backported/glh_linear (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/50_get_cpu_clock_count_for_more_than_just_i386.diff b/debian/patches/topic/fixes/jira-sent/50_get_cpu_clock_count_for_more_than_just_i386.diff
new file mode 100644
index 0000000..95a9a11
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/50_get_cpu_clock_count_for_more_than_just_i386.diff
@@ -0,0 +1,40 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/50_get_cpu_clock_count_for_more_than_just_i386
+
+Fix CPU clock count for non i386 based processors eg PPC.
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llcommon/llfasttimer.cpp |   16 ++--------------
+ 1 files changed, 2 insertions(+), 14 deletions(-)
+
+diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp
+index 01db945..fee83dc 100644
+--- a/indra/llcommon/llfasttimer.cpp
++++ b/indra/llcommon/llfasttimer.cpp
+@@ -91,20 +91,8 @@ U64 get_cpu_clock_count()
+ #endif // LL_WINDOWS
+ 
+ 
+-#if (LL_LINUX || LL_SOLARIS) && (defined(__i386__) || defined(__amd64__))
+-U64 get_cpu_clock_count()
+-{
+-	U64 x;
+-	__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
+-	return x;
+-}
+-#endif
+-
+-#if LL_DARWIN || (LL_SOLARIS && defined(__sparc__))
+-//
+-// Mac implementation of CPU clock
+-//
+-// Just use gettimeofday implementation for now
++#if LL_LINUX || LL_DARWIN || LL_SOLARIS
++// Both Linux and Mac use gettimeofday for accurate time
+ 
+ U64 get_cpu_clock_count()
+ {
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/50_get_cpu_clock_count_for_more_than_just_i386 (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/59_need_llpreprocessor_to_access_endian_macros.diff b/debian/patches/topic/fixes/jira-sent/59_need_llpreprocessor_to_access_endian_macros.diff
new file mode 100644
index 0000000..5c092c4
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/59_need_llpreprocessor_to_access_endian_macros.diff
@@ -0,0 +1,25 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/59_need_llpreprocessor_to_access_endian_macros
+
+PPC compile fix, give access to endian macros
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llmessage/message.h |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
+index b72aa9a..db12b97 100644
+--- a/indra/llmessage/message.h
++++ b/indra/llmessage/message.h
+@@ -48,6 +48,7 @@
+ #include "winsock2.h" // htons etc.
+ #endif
+ 
++#include "llpreprocessor.h"
+ #include "llerror.h"
+ #include "net.h"
+ #include "string_table.h"
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/59_need_llpreprocessor_to_access_endian_macros (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/VWR-1815_top_corner_fix.diff b/debian/patches/topic/fixes/jira-sent/VWR-1815_top_corner_fix.diff
new file mode 100644
index 0000000..f913fa9
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/VWR-1815_top_corner_fix.diff
@@ -0,0 +1,62 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/VWR-1815_top_corner_fix
+
+Remains of the top corner texture fix, this part accellerates downloads
+for stuck textures
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/lltexturefetch.cpp |   16 +++++++++++++++-
+ 1 files changed, 15 insertions(+), 1 deletions(-)
+
+diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
+index 80b8b4d..781ff4d 100644
+--- a/indra/newview/lltexturefetch.cpp
++++ b/indra/newview/lltexturefetch.cpp
+@@ -53,6 +53,9 @@ class LLTextureFetchWorker : public LLWorkerClass
+ {
+ friend class LLTextureFetch;
+ 
++public:
++	BOOL mAccelerateDownloadStuckTexture;
++
+ private:
+ #if 0
+ 	class URLResponder : public LLHTTPClient::Responder
+@@ -1061,6 +1064,14 @@ bool LLTextureFetchWorker::processSimulatorPackets()
+ 		}
+ 		bool have_all_data = mLastPacket >= mTotalPackets-1;
+ 		llassert_always(mRequestedSize > 0);
++		
++		if((buffer_size >= mRequestedSize) && mRequestedDiscard <=0)
++ 		{
++			if(!mAccelerateDownloadStuckTexture);
++				llwarns << "Accelerating download of a stuck texture :"<<mID << llendl
++			mAccelerateDownloadStuckTexture=TRUE;
++		}
++
+ 		if (buffer_size >= mRequestedSize || have_all_data)
+ 		{
+ 			/// We have enough (or all) data
+@@ -1557,6 +1568,7 @@ void LLTextureFetch::sendRequestListToSimulators()
+ 	const F32 LAZY_FLUSH_TIMEOUT = 15.f; // 10.0f // temp
+ 	const F32 MIN_REQUEST_TIME = 1.0f;
+ 	const F32 MIN_DELTA_PRIORITY = 1000.f;
++	const F32 MIN_ACCEL_KICK = 0.5f;
+ 
+ 	LLMutexLock lock(&mQueueMutex);
+ 	
+@@ -1587,7 +1599,9 @@ void LLTextureFetch::sendRequestListToSimulators()
+ 		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))
++			(elapsed >= LAZY_FLUSH_TIMEOUT) ||
++			(req->mAccelerateDownloadStuckTexture && (elapsed >=MIN_ACCEL_KICK))
++			)
+ 		{
+ 			requests[req->mHost].insert(req);
+ 		}
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/VWR-1815_top_corner_fix (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/VWR-8194_clamp_outline_for_broken_nvidia.diff b/debian/patches/topic/fixes/jira-sent/VWR-8194_clamp_outline_for_broken_nvidia.diff
new file mode 100644
index 0000000..561caab
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/VWR-8194_clamp_outline_for_broken_nvidia.diff
@@ -0,0 +1,38 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/VWR-8194_clamp_outline_for_broken_nvidia
+
+Prevent buffer overflow in temp GL matrix
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llrender/llrender.cpp |    7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
+index 80fed06..fbe186e 100644
+--- a/indra/llrender/llrender.cpp
++++ b/indra/llrender/llrender.cpp
+@@ -903,6 +903,9 @@ void LLRender::vertex3fv(const GLfloat* v)
+ 
+ void LLRender::texCoord2f(const GLfloat& x, const GLfloat& y)
+ { 
++	if (mCount >= 4096)
++		return;
++
+ 	mTexcoordsp[mCount] = LLVector2(x,y);
+ }
+ 
+@@ -918,6 +921,10 @@ void LLRender::texCoord2fv(const GLfloat* tc)
+ 
+ void LLRender::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a)
+ {
++
++	if (mCount >= 4096)
++		return;
++
+ 	mColorsp[mCount] = LLColor4U(r,g,b,a);
+ }
+ void LLRender::color4ubv(const GLubyte* c)
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/VWR-8194_clamp_outline_for_broken_nvidia (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/VWR-9557-EnableBuildWithNvidiaOrMesaHeaders.diff b/debian/patches/topic/fixes/jira-sent/VWR-9557-EnableBuildWithNvidiaOrMesaHeaders.diff
new file mode 100644
index 0000000..e509132
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/VWR-9557-EnableBuildWithNvidiaOrMesaHeaders.diff
@@ -0,0 +1,75 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/VWR-9557-EnableBuildWithNvidiaOrMesaHeaders
+
+Enable the build to succeed with either the mesa gl.h or the nvidia gl.h headers
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llrender/llgl.cpp      |   17 ++++++++++++++---
+ indra/llrender/llglheaders.h |    9 +++++++++
+ 2 files changed, 23 insertions(+), 3 deletions(-)
+
+diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
+index 67d258e..f74b13d 100644
+--- a/indra/llrender/llgl.cpp
++++ b/indra/llrender/llgl.cpp
+@@ -252,6 +252,12 @@ PFNWGLSWAPINTERVALEXTPROC			wglSwapIntervalEXT = NULL;
+ PFNGLCOLORTABLEEXTPROC glColorTableEXT = NULL;
+ #endif // LL_LINUX
+ 
++#if LL_LINUX && defined(WINGDIAPI)
++PFNGLACTIVETEXTUREARBPROC	glActiveTextureARB=NULL;
++PFNGLCLIENTACTIVETEXTUREARBPROC	glClientActiveTextureARB=NULL;
++PFNGLDRAWRANGEELEMENTSPROC 	glDrawRangeElements=NULL;
++#endif
++
+ #endif
+ 
+ LLGLManager gGLManager;
+@@ -762,15 +768,20 @@ void LLGLManager::initExtensions()
+ 		glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGetFramebufferAttachmentParameterivEXT");
+ 		glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenerateMipmapEXT");
+ 	}
+-#if !LL_LINUX
+-	// This is expected to be a static symbol on Linux GL implementations
++#if !LL_LINUX || (LL_LINUX && defined(WINGDIAPI))
++	// This is expected to be a static symbol on Linux GL implementations, except if we use the nvidia headers
+ 	glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)GLH_EXT_GET_PROC_ADDRESS("glDrawRangeElements");
+ 	if (!glDrawRangeElements)
+ 	{
+ 		mGLMaxVertexRange = 0;
+ 		mGLMaxIndexRange = 0;
+ 	}
+-#endif // !LL_LINUX
++#endif //!LL_LINUX
++
++#if LL_LINUX && defined(WINGDIAPI)
++	glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)GLH_EXT_GET_PROC_ADDRESS("glActiveTextureARB");
++	glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)GLH_EXT_GET_PROC_ADDRESS("glClientActiveTextureARB");
++#endif
+ 
+ 	if (mHasOcclusionQuery)
+ 	{
+diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
+index f047262..9d04f1c 100644
+--- a/indra/llrender/llglheaders.h
++++ b/indra/llrender/llglheaders.h
+@@ -76,6 +76,15 @@
+ #undef Status
+ #endif // LL_LINUX && !LL_MESA_HEADLESS
+ 
++#if LL_LINUX && defined(WINGDIAPI)
++// WINGDIAPI gets set if we are using the linux nvidia gl.h header which needs the 
++// functions below setting up
++// Missing functions when using nvidia header
++extern PFNGLACTIVETEXTUREARBPROC	glActiveTextureARB;
++extern PFNGLCLIENTACTIVETEXTUREARBPROC	glClientActiveTextureARB;
++extern PFNGLDRAWRANGEELEMENTSPROC 	glDrawRangeElements;
++
++#endif
+ 
+ // GL_ARB_vertex_buffer_object
+ extern PFNGLBINDBUFFERARBPROC		glBindBufferARB;
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/VWR-9557-EnableBuildWithNvidiaOrMesaHeaders (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/correctly_find_dbus_headers_on_standalone.diff b/debian/patches/topic/fixes/jira-sent/correctly_find_dbus_headers_on_standalone.diff
new file mode 100644
index 0000000..fe7d76c
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/correctly_find_dbus_headers_on_standalone.diff
@@ -0,0 +1,42 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/correctly_find_dbus_headers_on_standalone
+
+Correctly find the DBUS headers in cmake, patch sent up stream to LL and in the queue to be applied
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ doc/contributions.txt        |    1 +
+ indra/newview/CMakeLists.txt |    5 +++++
+ 2 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/doc/contributions.txt b/doc/contributions.txt
+index 54aad6e..26cb09b 100644
+--- a/doc/contributions.txt
++++ b/doc/contributions.txt
+@@ -226,6 +226,7 @@ Michelle2 Zenovka
+ 	VWR-8889
+ 	VWR-8310
+ 	VWR-4022
++	VWR-9499
+ Mm Alder
+ 	VWR-3777
+ 	VWR-4794
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..84436b3 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -59,6 +59,11 @@ include_directories(
+     ${LSCRIPT_INCLUDE_DIRS}/lscript_compile
+     )
+ 
++if (LINUX)
++    include_directories (${DBUSGLIB_INCLUDE_DIRS})
++endif (LINUX)
++
++
+ set(viewer_SOURCE_FILES
+     llagent.cpp
+     llagentdata.cpp
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/correctly_find_dbus_headers_on_standalone (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/dont_depend_on_artwork_to_build.diff b/debian/patches/topic/fixes/jira-sent/dont_depend_on_artwork_to_build.diff
new file mode 100644
index 0000000..562b347
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/dont_depend_on_artwork_to_build.diff
@@ -0,0 +1,28 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/dont_depend_on_artwork_to_build
+
+Do not require the artwork to be present in the cmake tree, sent
+upstream and discussed with BoS expected to be fixed upstream at
+some point.
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/CMakeLists.txt |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..4da2f50 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -1244,7 +1244,7 @@ source_group("Character File" FILES ${viewer_CHARACTER_FILES})
+ set_source_files_properties(${viewer_CHARACTER_FILES}
+                             PROPERTIES HEADER_FILE_ONLY TRUE)
+ 
+-list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
++#list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
+ 
+ if (WINDOWS)
+   file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi)
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/dont_depend_on_artwork_to_build (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/gcc_warning_on_llwindowsdl_var_not_set.diff b/debian/patches/topic/fixes/jira-sent/gcc_warning_on_llwindowsdl_var_not_set.diff
new file mode 100644
index 0000000..684c067
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/gcc_warning_on_llwindowsdl_var_not_set.diff
@@ -0,0 +1,25 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/gcc_warning_on_llwindowsdl_var_not_set
+
+Prevent FTBFS error with gcc and a wild variable.
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llwindow/llwindowsdl.cpp |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
+index 361126d..aff320f 100644
+--- a/indra/llwindow/llwindowsdl.cpp
++++ b/indra/llwindow/llwindowsdl.cpp
+@@ -2646,6 +2646,7 @@ BOOL LLWindowSDL::dialog_color_picker ( F32 *r, F32 *g, F32 *b)
+ 		orig_color.red = guint16(65535 * *r);
+ 		orig_color.green= guint16(65535 * *g);
+ 		orig_color.blue = guint16(65535 * *b);
++		orig_color.pixel = -1; //Default this to something or the copy next will produce a gcc warning
+ 		color = orig_color;
+ 
+ 		gtk_color_selection_set_previous_color (colorsel, &color);
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/gcc_warning_on_llwindowsdl_var_not_set (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/lltemplatemessagereader_memcpy.diff b/debian/patches/topic/fixes/jira-sent/lltemplatemessagereader_memcpy.diff
new file mode 100644
index 0000000..8cdb7f4
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/lltemplatemessagereader_memcpy.diff
@@ -0,0 +1,27 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/lltemplatemessagereader_memcpy
+
+Fix gcc FTBFS bug, possibly a gcc bug.
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llmessage/lltemplatemessagereader.cpp |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
+index 2c457e8..28daceb 100644
+--- a/indra/llmessage/lltemplatemessagereader.cpp
++++ b/indra/llmessage/lltemplatemessagereader.cpp
+@@ -676,7 +676,8 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
+ 						// default to 0s.
+ 						U32 size = mvci.getSize();
+ 						std::vector<U8> data(size);
+-						memset(&(data[0]), 0, size);
++						if(size>0)
++							memset(&(data[0]), 0, size);
+ 						cur_data_block->addData(mvci.getName(), &(data[0]), 
+ 												size, mvci.getType());
+ 					}
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/lltemplatemessagereader_memcpy (depends on: upstream)
diff --git a/debian/patches/topic/fixes/jira-sent/use_c_locale_and_dont_spam_me_because_i_am_not_american.diff b/debian/patches/topic/fixes/jira-sent/use_c_locale_and_dont_spam_me_because_i_am_not_american.diff
new file mode 100644
index 0000000..6edd900
--- /dev/null
+++ b/debian/patches/topic/fixes/jira-sent/use_c_locale_and_dont_spam_me_because_i_am_not_american.diff
@@ -0,0 +1,29 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/jira-sent/use_c_locale_and_dont_spam_me_because_i_am_not_american
+
+Better protection of locales, and don't enforce en_US.UTF-8
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llui/llresmgr.cpp |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp
+index bd05d43..b44af9f 100644
+--- a/indra/llui/llresmgr.cpp
++++ b/indra/llui/llresmgr.cpp
+@@ -446,7 +446,10 @@ const std::string LLLocale::SYSTEM_LOCALE("en_US.iso8859-1");
+ const std::string LLLocale::USER_LOCALE("en_US.ISO8859-1");
+ const std::string LLLocale::SYSTEM_LOCALE("C");
+ #else // LL_LINUX likes this
+-const std::string LLLocale::USER_LOCALE("en_US.utf8");
++//const std::string LLLocale::USER_LOCALE("en_US.utf8");
++// this is a good chance that I AM NOT AN AMERICAN don't assume that i am and
++// assume i have an american locale installed, C should do for the viewer
++const std::string LLLocale::USER_LOCALE("C");
+ const std::string LLLocale::SYSTEM_LOCALE("C");
+ #endif
+ 
+-- 
+tg: (c8fb40a..) topic/fixes/jira-sent/use_c_locale_and_dont_spam_me_because_i_am_not_american (depends on: upstream)
diff --git a/debian/patches/topic/fixes/new/allow_compilation_when_GST_DISABLE_GST_DEBUG_is_defined.diff b/debian/patches/topic/fixes/new/allow_compilation_when_GST_DISABLE_GST_DEBUG_is_defined.diff
new file mode 100644
index 0000000..7e06077
--- /dev/null
+++ b/debian/patches/topic/fixes/new/allow_compilation_when_GST_DISABLE_GST_DEBUG_is_defined.diff
@@ -0,0 +1,44 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/fixes/new/allow_compilation_when_GST_DISABLE_GST_DEBUG_is_defined
+
+Allow compilation when GST_DISABLE_GST_DEBUG is defined.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/llmedia/llmediaimplgstreamer_syms.h       |    2 ++
+ indra/llmedia/llmediaimplgstreamer_syms_raw.inc |    2 ++
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/indra/llmedia/llmediaimplgstreamer_syms.h b/indra/llmedia/llmediaimplgstreamer_syms.h
+index 92d46b7..0c423e3 100644
+--- a/indra/llmedia/llmediaimplgstreamer_syms.h
++++ b/indra/llmedia/llmediaimplgstreamer_syms.h
+@@ -67,8 +67,10 @@ void ungrab_gst_syms();
+ #define GST_TYPE_VIDEO_SINK (llgst_video_sink_get_type())
+ #undef _gst_debug_register_funcptr
+ #define _gst_debug_register_funcptr ll_gst_debug_register_funcptr
++#ifndef GST_DISABLE_GST_DEBUG
+ #undef _gst_debug_category_new
+ #define _gst_debug_category_new ll_gst_debug_category_new
++#endif
+ #undef __gst_debug_enabled
+ #define __gst_debug_enabled (0)
+ 
+diff --git a/indra/llmedia/llmediaimplgstreamer_syms_raw.inc b/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
+index 08ba6df..eb2b3ee 100644
+--- a/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
++++ b/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
+@@ -19,8 +19,10 @@ LL_GST_SYM(true, gst_element_class_add_pad_template, void, GstElementClass *klas
+ LL_GST_SYM(true, gst_element_class_set_details, void, GstElementClass *klass, const GstElementDetails *details);
+ LL_GST_SYM(true, gst_caps_unref, void, GstCaps* caps);
+ LL_GST_SYM(true, gst_caps_ref, GstCaps *, GstCaps* caps);
++#ifndef GST_DISABLE_GST_DEBUG
+ LL_GST_SYM(true, _gst_debug_register_funcptr, void, GstDebugFuncPtr func, gchar* ptrname);
+ LL_GST_SYM(true, _gst_debug_category_new, GstDebugCategory *, gchar *name, guint color, gchar *description);
++#endif
+ LL_GST_SYM(true, gst_caps_is_empty, gboolean, const GstCaps *caps);
+ LL_GST_SYM(true, gst_caps_from_string, GstCaps *, const gchar *string);
+ LL_GST_SYM(true, gst_caps_replace, void, GstCaps **caps, GstCaps *newcaps);
+-- 
+tg: (c8fb40a..) topic/fixes/new/allow_compilation_when_GST_DISABLE_GST_DEBUG_is_defined (depends on: upstream)
diff --git a/debian/patches/topic/fixes/new/delete_LLImageTGA_mColorMap_as_array.diff b/debian/patches/topic/fixes/new/delete_LLImageTGA_mColorMap_as_array.diff
new file mode 100644
index 0000000..1206ceb
--- /dev/null
+++ b/debian/patches/topic/fixes/new/delete_LLImageTGA_mColorMap_as_array.diff
@@ -0,0 +1,26 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/fixes/new/delete_LLImageTGA_mColorMap_as_array
+
+The destructor of LLImageTGA should delete mColorMap with 'operator delete[]', not 'operator delete'.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/llimage/llimagetga.cpp |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llimage/llimagetga.cpp b/indra/llimage/llimagetga.cpp
+index 32c2111..21d0fd1 100644
+--- a/indra/llimage/llimagetga.cpp
++++ b/indra/llimage/llimagetga.cpp
+@@ -104,7 +104,7 @@ LLImageTGA::LLImageTGA(const std::string& file_name)
+ 
+ LLImageTGA::~LLImageTGA()
+ {
+-	delete mColorMap;
++	delete [] mColorMap;
+ }
+ 
+ BOOL LLImageTGA::updateData()
+-- 
+tg: (c8fb40a..) topic/fixes/new/delete_LLImageTGA_mColorMap_as_array (depends on: upstream)
diff --git a/debian/patches/topic/fixes/new/delete_LLMediaImplGStreamer_mediaData_as_array.diff b/debian/patches/topic/fixes/new/delete_LLMediaImplGStreamer_mediaData_as_array.diff
new file mode 100644
index 0000000..900e2e0
--- /dev/null
+++ b/debian/patches/topic/fixes/new/delete_LLMediaImplGStreamer_mediaData_as_array.diff
@@ -0,0 +1,27 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/fixes/new/delete_LLMediaImplGStreamer_mediaData_as_array
+
+LLMediaImplGStreamer::mediaData is a pointer to an array.
+Delete with operator [] instead of operator delete.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ indra/llmedia/llmediaimplgstreamer.cpp |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llmedia/llmediaimplgstreamer.cpp b/indra/llmedia/llmediaimplgstreamer.cpp
+index b1d36f0..5e52f1c 100644
+--- a/indra/llmedia/llmediaimplgstreamer.cpp
++++ b/indra/llmedia/llmediaimplgstreamer.cpp
+@@ -431,7 +431,7 @@ unload ()
+ 
+ 	if (mediaData)
+ 	{
+-		delete mediaData;
++		delete [] mediaData;
+ 		mediaData = NULL;
+ 	}
+ 
+-- 
+tg: (7d04aa9..) topic/fixes/new/delete_LLMediaImplGStreamer_mediaData_as_array (depends on: build)
diff --git a/debian/patches/topic/fixes/thirdparty/0000_keep_statbars_from_overshooting.patch.diff b/debian/patches/topic/fixes/thirdparty/0000_keep_statbars_from_overshooting.patch.diff
new file mode 100644
index 0000000..8644292
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/0000_keep_statbars_from_overshooting.patch.diff
@@ -0,0 +1,54 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/0000_keep_statbars_from_overshooting.patch
+
+fix an issue with status bars overshooting their window
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/llstatbar.cpp |   13 +++++++------
+ 1 files changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/indra/newview/llstatbar.cpp b/indra/newview/llstatbar.cpp
+index d88e89f..b3a7a05 100644
+--- a/indra/newview/llstatbar.cpp
++++ b/indra/newview/llstatbar.cpp
+@@ -213,6 +213,7 @@ void LLStatBar::draw()
+ 		}
+ 
+ 		right = (S32) ((max - mMinBar) * value_scale);
++		right = llclamp(0, right, width);
+ 		gl_rect_2d(left, top, right, bottom, LLColor4(1.f, 0.f, 0.f, 0.25f));
+ 
+ 		S32 num_values = mStatp->getNumValues() - 1;
+@@ -228,22 +229,22 @@ void LLStatBar::draw()
+ 				if (mPerSec)
+ 				{
+ 					left = (S32)((mStatp->getPrevPerSec(i) - mMinBar) * value_scale);
+-					right = (S32)((mStatp->getPrevPerSec(i) - mMinBar) * value_scale) + 1;
+-					gl_rect_2d(left, bottom+i+1, right, bottom+i, LLColor4(1.f, 0.f, 0.f, 1.f));
+ 				}
+ 				else
+ 				{
+ 					left = (S32)((mStatp->getPrev(i) - mMinBar) * value_scale);
+-					right = (S32)((mStatp->getPrev(i) - mMinBar) * value_scale) + 1;
+-					gl_rect_2d(left, bottom+i+1, right, bottom+i, LLColor4(1.f, 0.f, 0.f, 1.f));
+-				}
++				}	
++				left = llclamp(0, left, width-1);
++				right = left+1;
++				gl_rect_2d(left, bottom+i+1, right, bottom+i, LLColor4(1.f, 0.f, 0.f, 1.f));
+ 			}
+ 		}
+ 		else
+ 		{
+ 			// draw current
+ 			left = (S32) ((current - mMinBar) * value_scale) - 1;
+-			right = (S32) ((current - mMinBar) * value_scale) + 1;
++			left = llclamp(0, left, width-1);
++			right = left + 2;
+ 			gl_rect_2d(left, top, right, bottom, LLColor4(1.f, 0.f, 0.f, 1.f));
+ 		}
+ 
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/0000_keep_statbars_from_overshooting.patch (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/0001_possible_crash_and_leak_llassetstorage.patch.diff b/debian/patches/topic/fixes/thirdparty/0001_possible_crash_and_leak_llassetstorage.patch.diff
new file mode 100644
index 0000000..154e918
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/0001_possible_crash_and_leak_llassetstorage.patch.diff
@@ -0,0 +1,148 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/0001_possible_crash_and_leak_llassetstorage.patch
+
+possible crash and memory leak
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llmessage/llassetstorage.cpp |   41 ++++++++++++++++++-----------------
+ 1 files changed, 21 insertions(+), 20 deletions(-)
+
+diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
+index fa14a2b..2d85011 100644
+--- a/indra/llmessage/llassetstorage.cpp
++++ b/indra/llmessage/llassetstorage.cpp
+@@ -522,16 +522,19 @@ void LLAssetStorage::downloadCompleteCallback(
+ 	S32 result,
+ 	const LLUUID& file_id,
+ 	LLAssetType::EType file_type,
+-	void* user_data, LLExtStat ext_status)
++	void* callback_parm_req, LLExtStat ext_status)
+ {
+ 	lldebugs << "LLAssetStorage::downloadCompleteCallback() for " << file_id
+ 		 << "," << LLAssetType::lookup(file_type) << llendl;
+-	LLAssetRequest* req = (LLAssetRequest*)user_data;
++
++	// be careful! req may be a ptr to memory already freed (a timeout does this)
++	LLAssetRequest* req = (LLAssetRequest*)callback_parm_req;	
+ 	if(!req)
+ 	{
+ 		llwarns << "LLAssetStorage::downloadCompleteCallback called without"
+ 			"a valid request." << llendl;
+-		return;
++		// we can live with a null pointer, we're not allowed to deref the ptr anyway (see above)
++		// return;  
+ 	}
+ 	if (!gAssetStorage)
+ 	{
+@@ -539,12 +542,10 @@ void LLAssetStorage::downloadCompleteCallback(
+ 		return;
+ 	}
+ 
+-	req->setUUID(file_id);
+-	req->setType(file_type);
+ 	if (LL_ERR_NOERR == result)
+ 	{
+ 		// we might have gotten a zero-size file
+-		LLVFile vfile(gAssetStorage->mVFS, req->getUUID(), req->getType());
++		LLVFile vfile(gAssetStorage->mVFS, file_id, file_type);
+ 		if (vfile.getSize() <= 0)
+ 		{
+ 			llwarns << "downloadCompleteCallback has non-existent or zero-size asset " << req->getUUID() << llendl;
+@@ -563,7 +564,7 @@ void LLAssetStorage::downloadCompleteCallback(
+ 	{
+ 		request_list_t::iterator curiter = iter++;
+ 		LLAssetRequest* tmp = *curiter;
+-		if ((tmp->getUUID() == req->getUUID()) && (tmp->getType()== req->getType()))
++		if ((tmp->getUUID() == file_id) && (tmp->getType() == file_type))
+ 		{
+ 			requests.push_front(tmp);
+ 			iter = gAssetStorage->mPendingDownloads.erase(curiter);
+@@ -576,7 +577,7 @@ void LLAssetStorage::downloadCompleteCallback(
+ 		LLAssetRequest* tmp = *curiter;
+ 		if (tmp->mDownCallback)
+ 		{
+-			tmp->mDownCallback(gAssetStorage->mVFS, req->getUUID(), req->getType(), tmp->mUserData, result, ext_status);
++			tmp->mDownCallback(gAssetStorage->mVFS, tmp->getUUID(), tmp->getType(), tmp->mUserData, result, ext_status);
+ 		}
+ 		delete tmp;
+ 	}
+@@ -672,10 +673,10 @@ void LLAssetStorage::downloadEstateAssetCompleteCallback(
+ 	S32 result,
+ 	const LLUUID& file_id,
+ 	LLAssetType::EType file_type,
+-	void* user_data,
++	void* callback_parm_req,
+ 	LLExtStat ext_status)
+ {
+-	LLEstateAssetRequest *req = (LLEstateAssetRequest*)user_data;
++	LLEstateAssetRequest *req = (LLEstateAssetRequest*)callback_parm_req;
+ 	if(!req)
+ 	{
+ 		llwarns << "LLAssetStorage::downloadEstateAssetCompleteCallback called"
+@@ -689,12 +690,10 @@ void LLAssetStorage::downloadEstateAssetCompleteCallback(
+ 		return;
+ 	}
+ 
+-	req->setUUID(file_id);
+-	req->setType(file_type);
+ 	if (LL_ERR_NOERR == result)
+ 	{
+ 		// we might have gotten a zero-size file
+-		LLVFile vfile(gAssetStorage->mVFS, req->getUUID(), req->getAType());
++		LLVFile vfile(gAssetStorage->mVFS, file_id, file_type);
+ 		if (vfile.getSize() <= 0)
+ 		{
+ 			llwarns << "downloadCompleteCallback has non-existent or zero-size asset!" << llendl;
+@@ -704,7 +703,9 @@ void LLAssetStorage::downloadEstateAssetCompleteCallback(
+ 		}
+ 	}
+ 
+-	req->mDownCallback(gAssetStorage->mVFS, req->getUUID(), req->getAType(), req->mUserData, result, ext_status);
++	req->mDownCallback(gAssetStorage->mVFS, file_id, file_type, req->mUserData, result, ext_status);
++
++	delete req;
+ }
+ 
+ void LLAssetStorage::getInvItemAsset(const LLHost &object_sim, const LLUUID &agent_id, const LLUUID &session_id,
+@@ -809,10 +810,10 @@ void LLAssetStorage::downloadInvItemCompleteCallback(
+ 	S32 result,
+ 	const LLUUID& file_id,
+ 	LLAssetType::EType file_type,
+-	void* user_data,
++	void* callback_parm_req,
+ 	LLExtStat ext_status)
+ {
+-	LLInvItemRequest *req = (LLInvItemRequest*)user_data;
++	LLInvItemRequest *req = (LLInvItemRequest*)callback_parm_req;
+ 	if(!req)
+ 	{
+ 		llwarns << "LLAssetStorage::downloadEstateAssetCompleteCallback called"
+@@ -825,12 +826,10 @@ void LLAssetStorage::downloadInvItemCompleteCallback(
+ 		return;
+ 	}
+ 
+-	req->setUUID(file_id);
+-	req->setType(file_type);
+ 	if (LL_ERR_NOERR == result)
+ 	{
+ 		// we might have gotten a zero-size file
+-		LLVFile vfile(gAssetStorage->mVFS, req->getUUID(), req->getType());
++		LLVFile vfile(gAssetStorage->mVFS, file_id, file_type);
+ 		if (vfile.getSize() <= 0)
+ 		{
+ 			llwarns << "downloadCompleteCallback has non-existent or zero-size asset!" << llendl;
+@@ -840,7 +839,9 @@ void LLAssetStorage::downloadInvItemCompleteCallback(
+ 		}
+ 	}
+ 
+-	req->mDownCallback(gAssetStorage->mVFS, req->getUUID(), req->getType(), req->mUserData, result, ext_status);
++	req->mDownCallback(gAssetStorage->mVFS, file_id, file_type, req->mUserData, result, ext_status);
++
++	delete req;
+ }
+ 
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/0001_possible_crash_and_leak_llassetstorage.patch (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/0001_possible_crash_in_llviewerpartssim.diff b/debian/patches/topic/fixes/thirdparty/0001_possible_crash_in_llviewerpartssim.diff
new file mode 100644
index 0000000..814bbec
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/0001_possible_crash_in_llviewerpartssim.diff
@@ -0,0 +1,38 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/0001_possible_crash_in_llviewerpartssim
+
+Another possible crash fix
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/llviewerpartsim.cpp |   13 ++++++++++---
+ 1 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp
+index 95fb307..8ab456b 100644
+--- a/indra/newview/llviewerpartsim.cpp
++++ b/indra/newview/llviewerpartsim.cpp
+@@ -686,10 +686,17 @@ void LLViewerPartSim::updateSimulation()
+ 		S32 visirate = 1;
+ 		if (vobj)
+ 		{
+-			LLSpatialGroup* group = vobj->mDrawable->getSpatialGroup();
+-			if (group && !group->isVisible()) // && !group->isState(LLSpatialGroup::OBJECT_DIRTY))
++			if(vobj->mDrawable)
+ 			{
+-				visirate = 8;
++				LLSpatialGroup* group = vobj->mDrawable->getSpatialGroup();
++				if (group && !group->isVisible()) // && !group->isState(LLSpatialGroup::OBJECT_DIRTY))
++				{
++					visirate = 8;
++				}
++			}
++			else
++			{
++				llwarns << "Crash avoided, vobj->mDrawable is NULL" << llendl;
+ 			}
+ 		}
+ 
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/0001_possible_crash_in_llviewerpartssim (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/1294_llworkerthread_when_terminating_program.patch.diff b/debian/patches/topic/fixes/thirdparty/1294_llworkerthread_when_terminating_program.patch.diff
new file mode 100644
index 0000000..71db1ca
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/1294_llworkerthread_when_terminating_program.patch.diff
@@ -0,0 +1,26 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/1294_llworkerthread_when_terminating_program.patch
+
+Kill a llworker thread when exiting
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llcommon/llworkerthread.cpp |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
+index 0389cff..cb6c2ec 100644
+--- a/indra/llcommon/llworkerthread.cpp
++++ b/indra/llcommon/llworkerthread.cpp
+@@ -111,7 +111,7 @@ S32 LLWorkerThread::update(U32 max_time_ms)
+ 	}
+ 	LLWorkerClass::sDeleteLock = FALSE ;
+     // delete and aborted entries mean there's still work to do
+-	res += delete_list.size() + abort_list.size();
++	res +=  !mDeleteList.empty() + !delete_list.empty();  // deleted entries mean there's still work to do
+ 	return res;
+ }
+ 
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/1294_llworkerthread_when_terminating_program.patch (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/1857_apr_thread_mutex_nested.patch.diff b/debian/patches/topic/fixes/thirdparty/1857_apr_thread_mutex_nested.patch.diff
new file mode 100644
index 0000000..4fca000
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/1857_apr_thread_mutex_nested.patch.diff
@@ -0,0 +1,56 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/1857_apr_thread_mutex_nested.patch
+
+Fix issue with nested apt thread mutex
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llcommon/llapr.cpp     |    2 +-
+ indra/llcommon/llthread.cpp  |    2 +-
+ indra/llmessage/llpumpio.cpp |    4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
+index 17c753d..9f52960 100644
+--- a/indra/llcommon/llapr.cpp
++++ b/indra/llcommon/llapr.cpp
+@@ -47,7 +47,7 @@ void ll_init_apr()
+ 		apr_pool_create(&gAPRPoolp, NULL);
+ 
+ 		// Initialize the logging mutex
+-		apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp);
++		apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_NESTED, gAPRPoolp);
+ 	}
+ }
+ 
+diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
+index 8bc9aac..dab5cd2 100644
+--- a/indra/llcommon/llthread.cpp
++++ b/indra/llcommon/llthread.cpp
+@@ -276,7 +276,7 @@ LLMutex::LLMutex(apr_pool_t *poolp) :
+ 		mIsLocalPool = TRUE;
+ 		apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
+ 	}
+-	apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mAPRPoolp);
++	apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_NESTED, mAPRPoolp);
+ }
+ 
+ 
+diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
+index 467502b..35a6d21 100644
+--- a/indra/llmessage/llpumpio.cpp
++++ b/indra/llmessage/llpumpio.cpp
+@@ -830,8 +830,8 @@ void LLPumpIO::initialize(apr_pool_t* pool)
+ 	if(!pool) return;
+ #if LL_THREADS_APR
+ 	// SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly.
+-	apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, pool);
+-	apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, pool);
++	apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_NESTED, pool);
++	apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_NESTED, pool);
+ #endif
+ 	mPool = pool;
+ }
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/1857_apr_thread_mutex_nested.patch (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/2003_possible_crash_draganddrop.patch.diff b/debian/patches/topic/fixes/thirdparty/2003_possible_crash_draganddrop.patch.diff
new file mode 100644
index 0000000..510c2c0
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/2003_possible_crash_draganddrop.patch.diff
@@ -0,0 +1,30 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/2003_possible_crash_draganddrop.patch
+
+Possible crash fix
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/lltooldraganddrop.cpp |    6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
+index 39070b7..72ee24b 100644
+--- a/indra/newview/lltooldraganddrop.cpp
++++ b/indra/newview/lltooldraganddrop.cpp
+@@ -850,6 +850,12 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
+ 		{
+ 			LLInventoryObject* cargo = locateInventory(item, cat);
+ 
++			if (!cargo) 
++			{
++				handled = FALSE;
++				break;
++			}
++
+ 			EAcceptance item_acceptance = ACCEPT_NO;
+ 			handled = handled && root_view->handleDragAndDrop(x, y, mask, FALSE,
+ 												mCargoTypes[mCurItemIndex],
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/2003_possible_crash_draganddrop.patch (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/2543_possible_crash_in_group_voting_propsals.patch.diff b/debian/patches/topic/fixes/thirdparty/2543_possible_crash_in_group_voting_propsals.patch.diff
new file mode 100644
index 0000000..f913494
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/2543_possible_crash_in_group_voting_propsals.patch.diff
@@ -0,0 +1,126 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/2543_possible_crash_in_group_voting_propsals.patch
+
+Possible crash fix
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/llui/llscrolllistctrl.cpp      |   18 ++++++++++++++++++
+ indra/newview/llpanelgroupvoting.cpp |    9 ++++++++-
+ 2 files changed, 26 insertions(+), 1 deletions(-)
+
+diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
+index 92bcb88..c990a1f 100644
+--- a/indra/llui/llscrolllistctrl.cpp
++++ b/indra/llui/llscrolllistctrl.cpp
+@@ -676,6 +676,11 @@ void LLScrollListCtrl::clearRows()
+ 
+ LLScrollListItem* LLScrollListCtrl::getFirstSelected() const
+ {
++	if (!getCanSelect())
++	{
++		return NULL;
++	}
++
+ 	item_list::const_iterator iter;
+ 	for(iter = mItemList.begin(); iter != mItemList.end(); iter++)
+ 	{
+@@ -691,6 +696,13 @@ LLScrollListItem* LLScrollListCtrl::getFirstSelected() const
+ std::vector<LLScrollListItem*> LLScrollListCtrl::getAllSelected() const
+ {
+ 	std::vector<LLScrollListItem*> ret;
++
++	if (!getCanSelect())
++	{
++		return ret;
++	}
++
++
+ 	item_list::const_iterator iter;
+ 	for(iter = mItemList.begin(); iter != mItemList.end(); iter++)
+ 	{
+@@ -705,6 +717,12 @@ std::vector<LLScrollListItem*> LLScrollListCtrl::getAllSelected() const
+ 
+ S32 LLScrollListCtrl::getFirstSelectedIndex() const
+ {
++	if (!getCanSelect())
++	{
++		return -1;
++	}
++
++
+ 	S32 CurSelectedIndex = 0;
+ 	item_list::const_iterator iter;
+ 	for (iter = mItemList.begin(); iter != mItemList.end(); iter++)
+diff --git a/indra/newview/llpanelgroupvoting.cpp b/indra/newview/llpanelgroupvoting.cpp
+index b1e3e15..5d21f4e 100644
+--- a/indra/newview/llpanelgroupvoting.cpp
++++ b/indra/newview/llpanelgroupvoting.cpp
+@@ -592,6 +592,7 @@ void LLPanelGroupVoting::impl::sendGroupProposalsRequest(const LLUUID& group_id)
+ 	//we're pining the server in high latency situations
+ 	addPendingActiveScrollListItem(0, 0, ADD_BOTTOM);
+ 	mProposals->setCanSelect(FALSE);
++	mBtnViewProposalItem->setEnabled(FALSE);
+ 
+ 	LLMessageSystem *msg = gMessageSystem;
+ 	msg->newMessageFast(_PREHASH_GroupActiveProposalsRequest);
+@@ -870,6 +871,7 @@ void LLPanelGroupVoting::impl::sendGroupVoteHistoryRequest(const LLUUID& group_i
+ 	//add some text so the user knows we're doing something
+ 	addPendingHistoryScrollListItem(0, 0, ADD_BOTTOM);
+ 	mVotesHistory->setCanSelect(FALSE);
++	mBtnViewHistoryItem->setEnabled(FALSE);
+ 
+ 	LLMessageSystem *msg = gMessageSystem;
+ 	msg->newMessageFast(_PREHASH_GroupVoteHistoryRequest);
+@@ -1066,6 +1068,7 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
+ 		//no active proposals and make the scroll list unselectable
+ 		self->addNoActiveScrollListItem(ADD_BOTTOM);
+ 		self->mProposals->setCanSelect(FALSE);
++		self->mBtnViewProposalItem->setEnabled(FALSE);
+ 	}
+ 	else if ( (U32)received != num_expected )
+ 	{
+@@ -1073,6 +1076,7 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
+ 											 num_expected,
+ 											 ADD_BOTTOM);
+ 		self->mProposals->setCanSelect(FALSE);
++		self->mBtnViewProposalItem->setEnabled(FALSE);
+ 	}
+ 	else
+ 	{
+@@ -1086,6 +1090,7 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
+ 		}
+ 
+ 		self->mProposals->setCanSelect(TRUE);
++		self->mBtnViewProposalItem->setEnabled(TRUE);
+ 	}
+ }
+ 
+@@ -1134,7 +1139,7 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
+ 		//no active proposals and make the scroll list unselectable
+ 		self->addNoHistoryScrollListItem(ADD_BOTTOM);
+ 		self->mVotesHistory->setCanSelect(FALSE);
+-
++		self->mBtnViewHistoryItem->setEnabled(FALSE);
+ 		return;
+ 	}
+ 
+@@ -1248,6 +1253,7 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
+ 											  num_expected,
+ 											  ADD_BOTTOM);
+ 		self->mVotesHistory->setCanSelect(FALSE);
++		self->mBtnViewHistoryItem->setEnabled(FALSE);
+ 	}
+ 	else
+ 	{
+@@ -1261,6 +1267,7 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
+ 		}
+ 
+ 		self->mVotesHistory->setCanSelect(TRUE);
++		self->mBtnViewHistoryItem->setEnabled(TRUE);
+ 	}
+ }
+ 
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/2543_possible_crash_in_group_voting_propsals.patch (depends on: upstream)
diff --git a/debian/patches/topic/fixes/thirdparty/2683_possible_crash_update_speaker_list.patch.diff b/debian/patches/topic/fixes/thirdparty/2683_possible_crash_update_speaker_list.patch.diff
new file mode 100644
index 0000000..479aca8
--- /dev/null
+++ b/debian/patches/topic/fixes/thirdparty/2683_possible_crash_update_speaker_list.patch.diff
@@ -0,0 +1,51 @@
+From: Robin Cornelius <robin.cornelius at gmail.com>
+Subject: [PATCH] topic/fixes/thirdparty/2683_possible_crash_update_speaker_list.patch
+
+Possible crash fix
+
+Signed-off-by: Robin Cornelius <robin.cornelius at gmail.com>
+
+---
+ indra/newview/llfloateractivespeakers.cpp |    4 ++--
+ indra/newview/llviewerobjectlist.cpp      |    4 ++++
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/indra/newview/llfloateractivespeakers.cpp b/indra/newview/llfloateractivespeakers.cpp
+index bee6155..7c12e15 100644
+--- a/indra/newview/llfloateractivespeakers.cpp
++++ b/indra/newview/llfloateractivespeakers.cpp
+@@ -1369,7 +1369,7 @@ void LLLocalSpeakerMgr::updateSpeakerList()
+ 	for(avatar_it = LLCharacter::sInstances.begin(); avatar_it != LLCharacter::sInstances.end(); ++avatar_it)
+ 	{
+ 		LLVOAvatar* avatarp = (LLVOAvatar*)*avatar_it;
+-		if (dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) <= CHAT_NORMAL_RADIUS)
++		if (!avatarp->isDead() &&  dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) <= CHAT_NORMAL_RADIUS)
+ 		{
+ 			setSpeaker(avatarp->getID());
+ 		}
+@@ -1383,7 +1383,7 @@ void LLLocalSpeakerMgr::updateSpeakerList()
+ 		if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY)
+ 		{
+ 			LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id);
+-			if (!avatarp || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS)
++			if (!avatarp || avatarp->isDead() || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS)
+ 			{
+ 				speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL;
+ 				speakerp->mDotColor = INACTIVE_COLOR;
+diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
+index f3d7bd9..e81c78c 100644
+--- a/indra/newview/llviewerobjectlist.cpp
++++ b/indra/newview/llviewerobjectlist.cpp
+@@ -873,6 +873,10 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
+ 		if (objectp->mRegionp == regionp)
+ 		{
+ 			killObject(objectp);
++
++			// invalidate region pointer. region will become invalid, but 
++			// refcounted objects may survive the cleanDeadObjects() call below
++			objectp->mRegionp = NULL;	 
+ 		}
+ 	}
+ 
+-- 
+tg: (c8fb40a..) topic/fixes/thirdparty/2683_possible_crash_update_speaker_list.patch (depends on: upstream)
diff --git a/debian/patches/topic/pandora/add_support_for_libcwd.diff b/debian/patches/topic/pandora/add_support_for_libcwd.diff
new file mode 100644
index 0000000..6357a37
--- /dev/null
+++ b/debian/patches/topic/pandora/add_support_for_libcwd.diff
@@ -0,0 +1,815 @@
+From: Carlo Wood <carlo at alinoe.com>
+Subject: [PATCH] topic/pandora/add_support_for_libcwd
+
+This adds support for libcwd (version 1.0.1 or higher).
+In order to actually link with libcwd_r, you need to set
+the correct environment variables (and reconfigure):
+
+LDFLAGS+=" $(pkg-config --libs libcwd_r)"
+CXXFLAGS+=" $(pkg-config --cflags libcwd_r)"
+
+Furthermore, for debugging in general, it is
+highly recommended to use:
+
+CXXFLAGS+="-g3"
+DEB_BUILD_OPTIONS="noopt"
+
+This patch also introduces two commands that can be run
+from without gdb:
+
+(gdb) call cwdebug_start
+(gdb) c
+^C
+(gdb) call cwdebug_stop
+
+which starts and stops recording backtraces for
+calls to malloc.
+
+Signed-off-by: Carlo Wood <carlo at alinoe.com>
+
+---
+ debian/conffiles/libcwd                 |   19 ++
+ indra/CMakeLists.txt                    |    1 +
+ indra/cmake/Cwdebug.cmake               |    1 +
+ indra/cwdebug/CMakeLists.txt            |   31 +++
+ indra/cwdebug/cwdebug.h                 |    9 +
+ indra/cwdebug/debug.cc                  |  388 +++++++++++++++++++++++++++++++
+ indra/cwdebug/debug.h                   |  176 ++++++++++++++
+ indra/cwdebug/debug_ostream_operators.h |    1 +
+ indra/cwdebug/sys.h                     |    9 +
+ indra/linux_crash_logger/CMakeLists.txt |    2 +
+ indra/llcommon/llerror.cpp              |    8 +
+ indra/newview/CMakeLists.txt            |    2 +
+ indra/newview/llappviewerlinux.cpp      |    3 +
+ 13 files changed, 650 insertions(+), 0 deletions(-)
+
+diff --git a/debian/conffiles/libcwd b/debian/conffiles/libcwd
+new file mode 100644
+index 0000000..1b49a26
+--- /dev/null
++++ b/debian/conffiles/libcwd
+@@ -0,0 +1,19 @@
++# Debug code and actually linking with libcwd_r is only done if
++# DEB_BUILD_OPTIONS contains the string 'libcwd'.
++for opt in $DEB_BUILD_OPTIONS dummy; do
++  if [ "$opt" = "libcwd" ]; then
++    LDFLAGS+=" $(pkg-config --libs libcwd_r)"
++    CXXFLAGS+=" $(pkg-config --cflags libcwd_r)"
++    if [ $? -ne 0 ]; then
++      exit $?
++    fi
++  fi
++done
++
++# We have to use a full path here in order for cmake's 'compile a simple test'
++# to work. Correct would be to add ${CWDEBUG_INCLUDE_DIRS} to the
++# include_directories of every CMakeLists.txt, but the whole point of
++# doing this -include is to avoid too many collision with upstream
++# changes by NOT having to change a lot of files.
++CXXFLAGS+=" -I`pwd`/indra/cwdebug -include cwdebug.h"
++
+diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
+index c473b94..7aa95cc 100644
+--- a/indra/CMakeLists.txt
++++ b/indra/CMakeLists.txt
+@@ -34,6 +34,7 @@ file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/temp)
+ file(WRITE ${CMAKE_BINARY_DIR}/temp/sentinel_installed "0")
+ add_subdirectory(cmake)
+ 
++add_subdirectory(${LIBS_OPEN_PREFIX}cwdebug)
+ add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
+ add_subdirectory(${LIBS_OPEN_PREFIX}llcharacter)
+ add_subdirectory(${LIBS_OPEN_PREFIX}llcommon)
+diff --git a/indra/cmake/Cwdebug.cmake b/indra/cmake/Cwdebug.cmake
+new file mode 100644
+index 0000000..9568a62
+--- /dev/null
++++ b/indra/cmake/Cwdebug.cmake
+@@ -0,0 +1 @@
++set(CWDEBUG_LIBRARIES cwdebug)
+diff --git a/indra/cwdebug/CMakeLists.txt b/indra/cwdebug/CMakeLists.txt
+new file mode 100644
+index 0000000..e3dc504
+--- /dev/null
++++ b/indra/cwdebug/CMakeLists.txt
+@@ -0,0 +1,31 @@
++# -*- cmake -*-
++
++project(cwdebug)
++
++include(00-Common)
++include(LLCommon)
++include(LLMath)
++include(LLMessage)
++include(LLVFS)
++
++include_directories (${CMAKE_CURRENT_SOURCE_DIR})
++
++set(cwdebug_SOURCE_FILES
++    debug.cc
++    )
++
++set(cwdebug_HEADER_FILES
++    CMakeLists.txt
++
++    cwdebug.h
++    sys.h
++    debug.h
++    debug_ostream_operators.h
++    )
++
++set_source_files_properties(${cwdebug_HEADER_FILES}
++                            PROPERTIES HEADER_FILE_ONLY TRUE)
++
++list(APPEND cwdebug_SOURCE_FILES ${cwdebug_HEADER_FILES})
++
++add_library (cwdebug ${cwdebug_SOURCE_FILES})
+diff --git a/indra/cwdebug/cwdebug.h b/indra/cwdebug/cwdebug.h
+new file mode 100644
+index 0000000..37415df
+--- /dev/null
++++ b/indra/cwdebug/cwdebug.h
+@@ -0,0 +1,9 @@
++// We support compiling C++ source files that are not
++// thread-safe, but in that case we assume that they
++// will not be linked with libcwd_r.
++#if !defined(_REENTRANT) || !defined(__linux__)
++#undef CWDEBUG
++#endif
++
++#include "sys.h"
++#include "debug.h"
+diff --git a/indra/cwdebug/debug.cc b/indra/cwdebug/debug.cc
+new file mode 100644
+index 0000000..92fa8e4
+--- /dev/null
++++ b/indra/cwdebug/debug.cc
+@@ -0,0 +1,388 @@
++// slviewer -- Second Life Viewer Source Code
++//
++//! @file debug.cc
++//! @brief This file contains the definitions of debug related objects and functions.
++//
++// Copyright (C) 2008, by
++// 
++// Carlo Wood, Run on IRC <carlo at alinoe.com>
++// RSA-1024 0x624ACAD5 1997-01-26                    Sign & Encrypt
++// Fingerprint16 = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61
++// 
++// This program is free software: you can redistribute it and/or modify
++// it under the terms of the GNU General Public License as published by
++// the Free Software Foundation, either version 2 of the License, or
++// (at your option) any later version.
++// 
++// This program is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++// 
++// You should have received a copy of the GNU General Public License
++// along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef USE_PCH
++#include "sys.h"                        // Needed for platform-specific code
++#endif
++
++#ifdef CWDEBUG
++
++#ifndef USE_PCH
++#include <cctype>                       // Needed for std::isprint
++#include <iomanip>                      // Needed for setfill
++#include <map>
++#include <string>
++#include <sstream>
++#include <boost/shared_array.hpp>
++#include "debug.h"
++#ifdef USE_LIBCW
++#include <libcw/memleak.h>		// memleak_filter
++#endif
++#endif // USE_PCH
++
++#define BACKTRACE_AQUIRE_LOCK           libcwd::_private_::mutex_tct<libcwd::_private_::backtrace_instance>::lock()
++#define BACKTRACE_RELEASE_LOCK          libcwd::_private_::mutex_tct<libcwd::_private_::backtrace_instance>::unlock()
++
++namespace debug {
++
++static int total_calls = 0;
++static int number_of_stack_traces = 0;
++
++class BackTrace {
++  private:
++    boost::shared_array<void*> M_buffer;
++    int M_frames;
++  public:
++    BackTrace(void** buffer, int frames) : M_buffer(new void* [frames]), M_frames(frames) { std::memcpy(M_buffer.get(), buffer, sizeof(void*) * frames); }
++
++    friend bool operator<(BackTrace const& bt1, BackTrace const& bt2)
++    {
++      if (bt1.M_frames != bt2.M_frames)
++	return bt1.M_frames < bt2.M_frames;
++      for (int frame = 0; frame < bt1.M_frames; ++frame)
++	if (bt1.M_buffer[frame] < bt2.M_buffer[frame])
++	  return true;
++        else if (bt1.M_buffer[frame] > bt2.M_buffer[frame])
++	  return true;
++      return false;
++    }
++
++  void dump_backtrace(void) const;
++
++  int frames(void) const { return M_frames; }
++  boost::shared_array<void*> const& buffer(void) const { return M_buffer; }
++};
++
++void BackTrace::dump_backtrace(void) const
++{
++  for (int frame = 0; frame < frames(); ++frame)
++  {
++    Dout(dc::notice, '#' << frame << ' ' << buffer()[frame] << ' ' << location_ct((char*)buffer()[frame] + libcwd::builtin_return_address_offset));
++  }
++}
++
++typedef std::map<BackTrace, int, std::less<BackTrace>, libcwd::_private_::internal_allocator> backtrace_map_t;
++backtrace_map_t* backtrace_map;
++
++void my_backtrace_hook(void** buffer, int frames LIBCWD_COMMA_TSD_PARAM)
++{
++  ++total_calls;
++
++  backtrace_map_t::iterator iter;
++
++  set_alloc_checking_off(__libcwd_tsd);
++  {
++    BackTrace backtrace(buffer, frames);
++    std::pair<backtrace_map_t::iterator, bool> res = backtrace_map->insert(backtrace_map_t::value_type(backtrace, 0));
++    if (res.second)
++      ++number_of_stack_traces;
++    ++res.first->second;
++    iter = res.first;
++  }
++  set_alloc_checking_on(__libcwd_tsd);
++#if 0
++  // Dump the stack trace.
++  iter->first.dump_backtrace();
++#endif
++}
++
++void start_recording_backtraces(void)
++{
++  BACKTRACE_AQUIRE_LOCK;
++  libcwd::backtrace_hook = my_backtrace_hook;
++  BACKTRACE_RELEASE_LOCK;
++  //Debug(dc::malloc.on());
++  LIBCWD_TSD_DECLARATION;
++  set_alloc_checking_off(__libcwd_tsd);
++  backtrace_map = new backtrace_map_t;
++  set_alloc_checking_on(__libcwd_tsd);
++}
++
++struct Compare {
++  bool operator()(backtrace_map_t::const_iterator const& iter1, backtrace_map_t::const_iterator const& iter2)
++  {
++    return iter1->second > iter2->second;
++  }
++};
++
++void stop_recording_backtraces(void)
++{
++  //Debug(dc::malloc.off());
++  BACKTRACE_AQUIRE_LOCK;
++  libcwd::backtrace_hook = NULL;
++
++  if (!backtrace_map)
++  {
++    Dout(dc::notice, "Not recording; call cwdebug_start() first.");
++    return;
++  }
++
++  Dout(dc::notice, "Total number of calls: " << total_calls);
++  Dout(dc::notice, "Number of different stack traces: " << number_of_stack_traces);
++  Dout(dc::notice, "First 10 stack traces:");
++  std::list<backtrace_map_t::const_iterator> entries;
++  for (backtrace_map_t::const_iterator iter = backtrace_map->begin(); iter != backtrace_map->end(); ++iter)
++    entries.push_back(iter);
++  entries.sort(Compare());
++  int count = 0;
++  for (std::list<backtrace_map_t::const_iterator>::iterator iter = entries.begin(); iter != entries.end(); ++iter, ++count)
++  {
++    Dout(dc::notice, "Used: " << (*iter)->second);
++    // Dump the stack trace.
++    (*iter)->first.dump_backtrace();
++    if (count == 10)
++      break;
++  }
++
++  // Clear all data.
++  LIBCWD_TSD_DECLARATION;
++  set_alloc_checking_off(__libcwd_tsd);
++  delete backtrace_map;
++  set_alloc_checking_on(__libcwd_tsd);
++  backtrace_map = NULL;
++  total_calls = 0;
++  number_of_stack_traces = 0;
++
++  BACKTRACE_RELEASE_LOCK;
++}
++
++  namespace channels {	// namespace DEBUGCHANNELS
++    namespace dc {
++
++#ifndef DOXYGEN
++#define DDCN(x) (x)
++#endif
++      // Add new debug channels here.
++
++      channel_ct viewer DDCN("VIEWER");	//!< This debug channel is used for the normal debugging out of the viewer.
++
++    } // namespace dc
++  } // namespace DEBUGCHANNELS
++
++  // Anonymous namespace, this map and its initialization functions are private to this file
++  // for Thead-safeness reasons.
++  namespace {
++
++    /*! @brief The type of rcfile_dc_states.
++     * @internal
++     */
++    typedef std::map<std::string, bool> rcfile_dc_states_type;
++
++    /*! @brief Map containing the default debug channel states used at the start of each new thread.
++     * @internal
++     *
++     * The first thread calls main, which calls debug::init which will initialize this
++     * map with all debug channel labels and whether or not they were turned on in the
++     * rcfile or not.
++     */
++    rcfile_dc_states_type rcfile_dc_states;
++
++    /*! @brief Set the default state of debug channel \a dc_label.
++     * @internal
++     *
++     * This function is called once for each debug channel.
++     */
++    void set_state(char const* dc_label, bool is_on)
++    {
++      std::pair<rcfile_dc_states_type::iterator, bool> res =
++          rcfile_dc_states.insert(rcfile_dc_states_type::value_type(std::string(dc_label), is_on));
++      if (!res.second)
++        Dout(dc::warning, "Calling set_state() more than once for the same label!");
++      return;
++    }
++
++    /*! @brief Save debug channel states.
++     * @internal
++     *
++     * One time initialization function of rcfile_dc_state.
++     * This must be called from debug::init after reading the rcfile.
++     */
++    void save_dc_states(void)
++    {
++      // We may only call this function once: it reflects the states as stored
++      // in the rcfile and that won't change.  Therefore it is not needed to
++      // lock `rcfile_dc_states', it is only written to by the first thread
++      // (once, via main -> init) when there are no other threads yet.
++      static bool second_time = false;
++      if (second_time)
++      {
++        Dout(dc::warning, "Calling save_dc_states() more than once!");
++	return;
++      }
++      second_time = true;
++      ForAllDebugChannels( set_state(debugChannel.get_label(), debugChannel.is_on()) );
++    }
++
++  } // anonymous namespace
++
++  /*! @brief Returns the the original state of a debug channel.
++   * @internal
++   *
++   * For a given \a dc_label, which must be the exact name (<tt>channel_ct::get_label</tt>) of an
++   * existing debug channel, this function returns \c true when the corresponding debug channel was
++   * <em>on</em> at the startup of the application, directly after reading the libcwd runtime
++   * configuration file (.libcwdrc).
++   *
++   * If the label/channel did not exist at the start of the application, it will return \c false
++   * (note that libcwd disallows adding debug channels to modules - so this would probably
++   * a bug).
++   */
++  bool is_on_in_rcfile(char const* dc_label)
++  {
++    rcfile_dc_states_type::const_iterator iter = rcfile_dc_states.find(std::string(dc_label));
++    if (iter == rcfile_dc_states.end())
++    {
++      Dout(dc::warning, "is_on_in_rcfile(\"" << dc_label << "\"): \"" << dc_label << "\" is an unknown label!");
++      return false;
++    }
++    return iter->second;
++  }
++
++#if LIBCWD_THREAD_SAFE
++  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
++  // I can cause I'm the maintainer of libcwd ;).
++  libcwd::_private_::pthread_lock_interface_ct cout_mutex(&mutex);
++  libcwd::_private_::lock_interface_base_ct* cout_mutex_ptr(&cout_mutex);
++#endif
++
++  /*! @brief Initialize debugging code from new threads.
++   *
++   * This function needs to be called at the start of each new thread,
++   * because a new thread starts in a completely reset state.
++   *
++   * The function turns on all debug channels that were turned on
++   * after reading the rcfile at the start of the application.
++   * Furthermore it initializes the debug ostream, its mutex and the
++   * margin of the default debug object (Dout).
++   */
++  void init_thread(void)
++  {
++    // Turn on all debug channels that are turned on as per rcfile configuration.
++    ForAllDebugChannels(
++        if (!debugChannel.is_on() && is_on_in_rcfile(debugChannel.get_label()))
++	  debugChannel.on();
++    );
++
++    // Turn on debug output.
++    Debug( libcw_do.on() );
++#if LIBCWD_THREAD_SAFE
++    Debug( libcw_do.set_ostream(&std::cout, cout_mutex_ptr) );
++#else
++    Debug( libcw_do.set_ostream(&std::cout) );
++#endif
++
++    static bool first_thread = true;
++    if (!first_thread)			// So far, the application has only one thread.  So don't add a thread id.
++    {
++      // Set the thread id in the margin.
++      char margin[22];
++      sprintf(margin, "%-20lu ", pthread_self());
++      Debug( libcw_do.margin().assign(margin, 21) );
++    }
++  }
++
++  /*! @brief Initialize debugging code from main.
++   *
++   * This function initializes the debug code.
++   */
++  void init(void)
++  {
++#if CWDEBUG_ALLOC && defined(USE_LIBCW)
++    // Tell the memory leak detector which parts of the code are
++    // expected to leak so that we won't get an alarm for those.
++    {
++      std::vector<std::pair<std::string, std::string> > hide_list;
++      hide_list.push_back(std::pair<std::string, std::string>("libdl.so.2", "_dlerror_run"));
++      hide_list.push_back(std::pair<std::string, std::string>("libstdc++.so.6", "__cxa_get_globals"));
++      // The following is actually necessary because of a bug in glibc
++      // (see http://sources.redhat.com/bugzilla/show_bug.cgi?id=311).
++      hide_list.push_back(std::pair<std::string, std::string>("libc.so.6", "dl_open_worker"));
++      memleak_filter().hide_functions_matching(hide_list);
++    }
++    {
++      std::vector<std::string> hide_list;
++      // Also because of http://sources.redhat.com/bugzilla/show_bug.cgi?id=311
++      hide_list.push_back(std::string("ld-linux.so.2"));
++      memleak_filter().hide_objectfiles_matching(hide_list);
++    }
++    memleak_filter().set_flags(libcwd::show_objectfile|libcwd::show_function);
++#endif
++
++    // The following call allocated the filebuf's of cin, cout, cerr, wcin, wcout and wcerr.
++    // Because this causes a memory leak being reported, make them invisible.
++    Debug(set_invisible_on());
++
++    // You want this, unless you mix streams output with C output.
++    // Read  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#8 for an explanation.
++    //std::ios::sync_with_stdio(false);
++
++    // Cancel previous call to set_invisible_on.
++    Debug(set_invisible_off());
++
++    // This will warn you when you are using header files that do not belong to the
++    // shared libcwd object that you linked with.
++    Debug( check_configuration() );
++
++    Debug(
++      libcw_do.on();		// Show which rcfile we are reading!
++      ForAllDebugChannels(
++        while (debugChannel.is_on())
++	  debugChannel.off()	// Print as little as possible though.
++      );
++      read_rcfile();		// Put 'silent = on' in the rcfile to suppress most of the output here.
++      libcw_do.off()
++    );
++    save_dc_states();
++
++    init_thread();
++  }
++
++#if CWDEBUG_LOCATION
++  /*! @brief Return call location.
++   *
++   * @param return_addr The return address of the call.
++   */
++  std::string call_location(void const* return_addr)
++  {
++    libcwd::location_ct loc((char*)return_addr + libcwd::builtin_return_address_offset);
++    std::ostringstream convert;
++    convert << loc;
++    return convert.str();
++  }
++#endif
++
++} // namespace debug
++
++// These can be called from gdb.
++void cwdebug_start()
++{
++  debug::start_recording_backtraces();
++}
++
++void cwdebug_stop()
++{
++  debug::stop_recording_backtraces();
++}
++
++#endif // CWDEBUG
+diff --git a/indra/cwdebug/debug.h b/indra/cwdebug/debug.h
+new file mode 100644
+index 0000000..0fe75c5
+--- /dev/null
++++ b/indra/cwdebug/debug.h
+@@ -0,0 +1,176 @@
++// slviewer -- Second Life Viewer Source Code
++//
++//! @file debug.h
++//! @brief This file contains the declaration of debug related macros, objects and functions.
++//
++// Copyright (C) 2008, by
++// 
++// Carlo Wood, Run on IRC <carlo at alinoe.com>
++// RSA-1024 0x624ACAD5 1997-01-26                    Sign & Encrypt
++// Fingerprint16 = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61
++// 
++// This program is free software: you can redistribute it and/or modify
++// it under the terms of the GNU General Public License as published by
++// the Free Software Foundation, either version 2 of the License, or
++// (at your option) any later version.
++// 
++// This program is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++// 
++// You should have received a copy of the GNU General Public License
++// along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++#ifndef DEBUG_H
++#define DEBUG_H
++
++#ifndef CWDEBUG
++
++#ifndef DOXYGEN         // No need to document this.  See http://libcwd.sourceforge.net/ for more info.
++
++#include <iostream>
++#include <cstdlib>      // std::exit, EXIT_FAILURE
++
++#define AllocTag1(p)
++#define AllocTag2(p, desc)
++#define AllocTag_dynamic_description(p, x)
++#define AllocTag(p, x)
++#define Debug(x)
++#define Dout(a, b)
++#define DoutEntering(a, b)
++#define DoutFatal(a, b) LibcwDoutFatal(::std, , a, b)
++#define ForAllDebugChannels(STATEMENT)
++#define ForAllDebugObjects(STATEMENT)
++#define LibcwDebug(dc_namespace, x)
++#define LibcwDout(a, b, c, d)
++#define LibcwDoutFatal(a, b, c, d) do { ::std::cerr << d << ::std::endl; ::std::exit(EXIT_FAILURE); } while (1)
++#define NEW(x) new x
++#define CWDEBUG_ALLOC 0
++#define CWDEBUG_MAGIC 0
++#define CWDEBUG_LOCATION 0
++#define CWDEBUG_LIBBFD 0
++#define CWDEBUG_DEBUG 0
++#define CWDEBUG_DEBUGOUTPUT 0
++#define CWDEBUG_DEBUGM 0
++#define CWDEBUG_DEBUGT 0
++#define CWDEBUG_MARKER 0
++
++#endif // !DOXYGEN
++
++#include <cassert>
++#ifdef DEBUG
++#define ASSERT(x) assert(x)
++#else
++#define ASSERT(x)
++#endif
++
++#else // CWDEBUG
++
++//! Assert \a x, if debugging is turned on.
++#define ASSERT(x) LIBCWD_ASSERT(x)
++
++#ifndef DEBUGCHANNELS
++//! @brief The namespace in which the \c dc namespace is declared.
++//
++// <A HREF="http://libcwd.sourceforge.net/">Libcwd</A> demands that this macro is defined
++// before <libcwd/debug.h> is included and must be the name of the namespace containing
++// the \c dc (Debug Channels) namespace.
++//
++// @sa debug::channels::dc
++
++#define DEBUGCHANNELS ::debug::channels
++#endif
++#include <libcwd/debug.h>
++
++//! Debug specific code.
++namespace debug {
++
++void init(void);                // Initialize debugging code, called once from main.
++void init_thread(void);         // Initialize debugging code, called once for each thread.
++
++//! @brief Debug Channels (dc) namespace.
++//
++// @sa debug::channels::dc
++namespace channels {	// namespace DEBUGCHANNELS
++
++//! The namespace containing the actual debug channels.
++namespace dc {
++using namespace libcwd::channels::dc;
++using libcwd::channel_ct;
++
++#ifndef DOXYGEN         // Doxygen bug causes a warning here.
++// Add the declaration of new debug channels here
++// and add their definition in a custom debug.cc file.
++extern channel_ct viewer;	// The normal logging output of the viewer (normally to stderr).
++
++#endif
++
++} // namespace dc
++} // namespace DEBUGCHANNELS
++
++#if CWDEBUG_LOCATION
++std::string call_location(void const* return_addr);
++#endif
++
++//! @brief Interface for marking scopes of invisible memory allocations.
++//
++// Creation of the object does nothing, you have to explicitly call
++// InvisibleAllocations::on.  Destruction of the object automatically
++// cancels any call to \c on of this object.  This makes it exception-
++// (stack unwinding) and recursive-safe.
++struct InvisibleAllocations {
++  int M_on;             //!< The number of times that InvisibleAllocations::on() was called.
++  //! Constructor.
++  InvisibleAllocations() : M_on(0) { }
++  //! Destructor.
++  ~InvisibleAllocations() { while (M_on > 0) off(); }
++  //! Set invisible allocations on. Can be called recursively.
++  void on(void) { libcwd::set_invisible_on(); ++M_on; }
++  //! Cancel one call to on().
++  void off(void) { assert(M_on > 0); --M_on; libcwd::set_invisible_off(); }
++};
++
++//! @brief Interface for marking scopes with indented debug output.
++//
++// Creation of the object increments the debug indentation. Destruction
++// of the object automatically decrements the indentation again.
++struct Indent {
++  int M_indent;                 //!< The extra number of spaces that were added to the indentation.
++  //! Construct an Indent object.
++  Indent(int indent) : M_indent(indent) { if (M_indent > 0) libcwd::libcw_do.inc_indent(M_indent); }
++  //! Destructor.
++  ~Indent() { if (M_indent > 0) libcwd::libcw_do.dec_indent(M_indent); }
++};
++
++} // namespace debug
++
++//! Debugging macro.
++//
++// Print "Entering " << \a data to channel \a cntrl and increment
++// debugging output indentation until the end of the current scope.
++#define DoutEntering(cntrl, data) \
++  int __slviewer_debug_indentation = 2;                                                                      \
++  {                                                                                                                     \
++    LIBCWD_TSD_DECLARATION;                                                                                             \
++    if (LIBCWD_DO_TSD_MEMBER_OFF(::libcwd::libcw_do) < 0)                                                               \
++    {                                                                                                                   \
++      ::libcwd::channel_set_bootstrap_st __libcwd_channel_set(LIBCWD_DO_TSD(::libcwd::libcw_do) LIBCWD_COMMA_TSD);      \
++      bool on;                                                                                                          \
++      {                                                                                                                 \
++        using namespace LIBCWD_DEBUGCHANNELS;                                                                           \
++        on = (__libcwd_channel_set|cntrl).on;                                                                           \
++      }                                                                                                                 \
++      if (on)                                                                                                           \
++        Dout(cntrl, "Entering " << data);                                                                               \
++      else                                                                                                              \
++        __slviewer_debug_indentation = 0;                                                                    \
++    }                                                                                                                   \
++  }                                                                                                                     \
++  debug::Indent __slviewer_debug_indent(__slviewer_debug_indentation);
++
++#endif // CWDEBUG
++
++#include "debug_ostream_operators.h"
++
++#endif // DEBUG_H
+diff --git a/indra/cwdebug/debug_ostream_operators.h b/indra/cwdebug/debug_ostream_operators.h
+new file mode 100644
+index 0000000..4459e9f
+--- /dev/null
++++ b/indra/cwdebug/debug_ostream_operators.h
+@@ -0,0 +1 @@
++// Empty so far...
+diff --git a/indra/cwdebug/sys.h b/indra/cwdebug/sys.h
+new file mode 100644
+index 0000000..c18df17
+--- /dev/null
++++ b/indra/cwdebug/sys.h
+@@ -0,0 +1,9 @@
++// The following is the libcwd related mandatory part.
++// It must be included before any system header file is included.
++#ifdef CWDEBUG
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++#include <libcwd/sys.h>
++#endif
++
+diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt
+index 6f6754e..edc0a94 100644
+--- a/indra/linux_crash_logger/CMakeLists.txt
++++ b/indra/linux_crash_logger/CMakeLists.txt
+@@ -11,6 +11,7 @@ include(LLVFS)
+ include(LLXML)
+ include(Linking)
+ include(UI)
++include(Cwdebug)
+ 
+ include_directories(
+     ${LLCOMMON_INCLUDE_DIRS}
+@@ -52,6 +53,7 @@ target_link_libraries(linux-crash-logger
+     ${LLCOMMON_LIBRARIES}
+     ${UI_LIBRARIES}
+     ${DB_LIBRARIES}
++    ${CWDEBUG_LIBRARIES}
+     )
+ 
+ add_custom_command(
+diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
+index 5c7c3cd..0593d6b 100644
+--- a/indra/llcommon/llerror.cpp
++++ b/indra/llcommon/llerror.cpp
+@@ -162,7 +162,15 @@ namespace {
+ 					break;
+ 				}
+ 			}
++#ifdef CWDEBUG
++			// Include normal logging in libcwd's message processing.
++			// This takes care of prefixing with thread ID's, locking
++			// and allows us to (temporarily) turn off normal logging
++			// output.
++			Dout(dc::viewer, message);
++#else
+ 			fprintf(stderr, "%s\n", message.c_str());
++#endif
+ 			if (ANSI_YES == mUseANSI) colorANSI("0"); // reset
+ 		}
+ 	
+diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
+index 4dd4c74..fafc547 100644
+--- a/indra/newview/CMakeLists.txt
++++ b/indra/newview/CMakeLists.txt
+@@ -34,6 +34,7 @@ include(UI)
+ include(UnixInstall)
+ include(LLKDU)
+ include(ViewerMiscLibs)
++include(Cwdebug)
+ 
+ if (WINDOWS)
+     include(CopyWinLibs)
+@@ -1410,6 +1411,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
+     ${WINDOWS_LIBRARIES}
+     ${XMLRPCEPI_LIBRARIES}
+     ${ELFIO_LIBRARIES}
++    ${CWDEBUG_LIBRARIES}
+     )
+ 
+ build_version(viewer)
+diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
+index 643013b..7d1e71d 100644
+--- a/indra/newview/llappviewerlinux.cpp
++++ b/indra/newview/llappviewerlinux.cpp
+@@ -93,6 +93,9 @@ static void exceptionTerminateHandler()
+ 
+ int main( int argc, char **argv ) 
+ {
++	Debug(debug::init());
++	Debug(libcw_do.on());
++
+ 	LLMemType mt1(LLMemType::MTYPE_STARTUP);
+ 
+ #if LL_SOLARIS && defined(__sparc)
+-- 
+tg: (b606591..) topic/pandora/add_support_for_libcwd (depends on: master)
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 54aad6e..563caaa 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -391,6 +391,13 @@ Tharax Ferraris
 Thraxis Epsilon
 	SVC-371
 	VWR-383
+Tue Torok
+	CT-68
+	CT-69
+	CT-70
+	CT-72
+	CT-73
+	CT-74
 Wilton Lundquist
 	VWR-7682
 Whoops Babii
diff --git a/indra/cmake/CopyWinLibs.cmake b/indra/cmake/CopyWinLibs.cmake
index b74ce4f..d4ddb23 100644
--- a/indra/cmake/CopyWinLibs.cmake
+++ b/indra/cmake/CopyWinLibs.cmake
@@ -153,7 +153,8 @@ endif (EXISTS ${internal_llkdu_path})
 if (MSVC80)
     FIND_PATH(debug_msvc8_redist_path msvcr80d.dll
         PATHS
-        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
+         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
+        NO_DEFAULT_PATH
         )
 
     if(EXISTS ${debug_msvc8_redist_path})
@@ -174,7 +175,8 @@ if (MSVC80)
 
     FIND_PATH(release_msvc8_redist_path msvcr80.dll
         PATHS
-        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
+         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
+        NO_DEFAULT_PATH
         )
 
     if(EXISTS ${release_msvc8_redist_path})
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 5c7c3cd..487907f 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -1170,6 +1170,10 @@ namespace LLError
 		return s.shouldLogCallCounter;
 	}
 
+#if LL_WINDOWS
+		// VC80 was optimizing the error away.
+		#pragma optimize("", off)
+#endif
 	void crashAndLoop(const std::string& message)
 	{
 		// Now, we go kaboom!
@@ -1182,6 +1186,9 @@ namespace LLError
 			// Loop forever, in case the crash didn't work?
 		}
 	}
+#if LL_WINDOWS
+		#pragma optimize("", on)
+#endif
 
 	std::string utcTime()
 	{
diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h
index 2c36871..a97abef 100644
--- a/indra/llcommon/llerrorcontrol.h
+++ b/indra/llcommon/llerrorcontrol.h
@@ -82,9 +82,9 @@ namespace LLError
 		Control functions.
 	*/
 
-	typedef void (*FatalFunction)(const std::string& message);
+	typedef void(*FatalFunction)(const std::string& message);
 	void crashAndLoop(const std::string& message);
-		// Default fatal funtion: divides by zero and loops forever
+		// Default fatal funtion: access null pointer and loops forever
 
 	void setFatalFunction(FatalFunction);
 		// The fatal function will be called when an message of LEVEL_ERROR
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 6ff2604..e027fad 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -34,7 +34,7 @@
 
 const S32 LL_VERSION_MAJOR = 1;
 const S32 LL_VERSION_MINOR = 22;
-const S32 LL_VERSION_PATCH = 1;
+const S32 LL_VERSION_PATCH = 2;
 const S32 LL_VERSION_BUILD = 0;
 
 const char * const LL_CHANNEL = "Second Life Release";
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index d9b22c5..a41b931 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -154,7 +154,7 @@ void LLImageGL::destroyGL(BOOL save_state)
 		LLImageGL* glimage = *iter;
 		if (glimage->mTexName && glimage->mComponents)
 		{
-			if (save_state)
+			if (save_state && glimage->isInitialized())
 			{
 				glimage->mSaveData = new LLImageRaw;
 				glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false);
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 80fed06..a15f44a 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -190,6 +190,10 @@ bool LLTexUnit::bind(const LLImageGL* texture)
 	{
 		return texture->bindDefaultImage(mIndex);
 	}
+	if (!texture->getTexName()) //if texture does not exist
+	{
+		return texture->bindDefaultImage(mIndex);
+	}
 
 	// Disabled caching of binding state.
 	if (texture != NULL)
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 508500a..6402985 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -38,6 +38,7 @@
 #include "llstring.h"
 
 // Project includes
+#include "llhtmlhelp.h"
 #include "llkeyboard.h"
 #include "llui.h"
 #include "lluiconstants.h"
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 5502246..4817d78 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -30,8 +30,6 @@
  */
 
 // Utilities functions the user interface needs
-
-//#include "llviewerprecompiledheaders.h"
 #include "linden_common.h"
 
 #include <string>
@@ -1647,6 +1645,34 @@ void LLUI::setCursorPositionLocal(const LLView* viewp, S32 x, S32 y)
 	setCursorPositionScreen(screen_x, screen_y);
 }
 
+// On Windows, the user typically sets the language when they install the
+// app (by running it with a shortcut that sets InstallLanguage).  On Mac,
+// or on Windows if the SecondLife.exe executable is run directly, the 
+// language follows the OS language.  In all cases the user can override
+// the language manually in preferences. JC
+// static
+std::string LLUI::getLanguage()
+{
+	std::string language = "en-us";
+	if (sConfigGroup)
+	{
+		language = sConfigGroup->getString("Language");
+		if (language.empty() || language == "default")
+		{
+			language = sConfigGroup->getString("InstallLanguage");
+		}
+		if (language.empty() || language == "default")
+		{
+			language = sConfigGroup->getString("SystemLanguage");
+		}
+		if (language.empty() || language == "default")
+		{
+			language = "en-us";
+		}
+	}
+	return language;
+}
+
 //static
 std::string LLUI::locateSkin(const std::string& filename)
 {
@@ -1660,11 +1686,7 @@ std::string LLUI::locateSkin(const std::string& filename)
 	{
 		if (!gDirUtilp->fileExists(found_file))
 		{
-			std::string localization(sConfigGroup->getString("Language"));		
-			if(localization == "default")
-			{
-				localization = sConfigGroup->getString("SystemLanguage");
-			}
+			std::string localization = getLanguage();
 			std::string local_skin = "xui" + slash + localization + slash + filename;
 			found_file = gDirUtilp->findSkinnedFilename(local_skin);
 		}
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index 4c1bb22..0f498d3 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -38,15 +38,17 @@
 #include "llcontrol.h"
 #include "llrect.h"
 #include "llcoord.h"
-#include "llhtmlhelp.h"
-#include "llgl.h"
+//#include "llhtmlhelp.h"
+#include "llgl.h"			// *TODO: break this dependency
 #include <stack>
-#include "llimagegl.h"
+//#include "llimagegl.h"
 
 // LLUIFactory
 #include "llsd.h"
 
 class LLColor4; 
+class LLHtmlHelp;
+class LLImageGL;
 class LLVector3;
 class LLVector2;
 class LLUUID;
@@ -139,13 +141,6 @@ inline void gl_rect_2d_offset_local( const LLRect& rect, S32 pixel_offset, BOOL
 	gl_rect_2d_offset_local( rect.mLeft, rect.mTop, rect.mRight, rect.mBottom, pixel_offset, filled );
 }
 
-// No longer used
-// Initializes translation table
-// void init_tr();
-
-// Returns a string from the string table in the correct language
-// std::string tr(const std::string& english_chars);
-
 // Used to hide the flashing text cursor when window doesn't have focus.
 extern BOOL gShowTextEditCursor;
 
@@ -172,6 +167,10 @@ public:
 	static void loadIdentity();
 	static void translate(F32 x, F32 y, F32 z = 0.0f);
 
+	// Return the ISO639 language name ("en", "ko", etc.) for the viewer UI.
+	// http://www.loc.gov/standards/iso639-2/php/code_list.php
+	static std::string getLanguage();
+
 	//helper functions (should probably move free standing rendering helper functions here)
 	static std::string locateSkin(const std::string& filename);
 	static void setCursorPositionScreen(S32 x, S32 y);
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index bcd4876..db52261 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -130,15 +130,7 @@ void LLUICtrlFactory::setupPaths()
 		for (path = root->getFirstChild(); path.notNull(); path = path->getNextSibling())
 		{
 			LLUIString path_val_ui(path->getValue());
-			std::string language = "en-us";
-			if (LLUI::sConfigGroup)
-			{
-				language = LLUI::sConfigGroup->getString("Language");
-				if(language == "default")
-				{
-					language = LLUI::sConfigGroup->getString("SystemLanguage");
-				}
-			}
+			std::string language = LLUI::getLanguage();
 			path_val_ui.setArg("[LANGUAGE]", language);
 
 			if (std::find(sXUIPaths.begin(), sXUIPaths.end(), path_val_ui.getString()) == sXUIPaths.end())
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index bc6fe7e..910b4f5 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -43,7 +43,7 @@
 #include "llfocusmgr.h"
 #include "llrect.h"
 #include "llstl.h"
-#include "llui.h"	// colors saved settings
+#include "llui.h"
 #include "lluictrl.h"
 #include "llwindow.h"
 #include "v3color.h"
@@ -710,25 +710,38 @@ BOOL LLView::handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_s
 			&& viewp->getEnabled()
 			&& viewp->handleToolTip(local_x, local_y, msg, sticky_rect_screen ))
 		{
+			// child provided a tooltip, just return
+			if (!msg.empty()) return TRUE;
+
+			// otherwise, one of our children ate the event so don't traverse
+			// siblings however, our child did not actually provide a tooltip
+            // so we might want to
 			handled = TRUE;
 			break;
 		}
 	}
 
+	// get our own tooltip
 	tool_tip = mToolTipMsg.getString();
 	if (
-		LLUI::sShowXUINames &&
-		(tool_tip.find(".xml", 0) == std::string::npos) && 
-		(mName.find("Drag", 0) == std::string::npos))
+		LLUI::sShowXUINames 
+		&& (tool_tip.find(".xml", 0) == std::string::npos) 
+		&& (mName.find("Drag", 0) == std::string::npos))
 	{
 		tool_tip = getShowNamesToolTip();
 	}
 
 	BOOL show_names_text_box = LLUI::sShowXUINames && dynamic_cast<LLTextBox*>(this) != NULL;
 
-	if( !handled && (blockMouseEvent(x, y) || show_names_text_box))
+	// don't allow any siblings to handle this event
+	// even if we don't have a tooltip
+	if (getMouseOpaque() || show_names_text_box)
 	{
+		handled = TRUE;
+	}
 
+	if(!tool_tip.empty())
+	{
 		msg = tool_tip;
 
 		// Convert rect local to screen coordinates
@@ -2060,139 +2073,6 @@ LLView* LLView::findSnapRect(LLRect& new_rect, const LLCoordGL& mouse_dir,
 
 	new_rect.translate(delta_x, delta_y);
 	return snap_view;
-
-	//// If the view is near the edge of its parent, snap it to
-	//// the edge.
-	//LLRect test_rect = getSnapRect();
-	//LLRect view_rect = getSnapRect();
-	//test_rect.stretch(padding);
-	//view_rect.stretch(padding);
-
-	//S32 x_threshold = threshold;
-	//S32 y_threshold = threshold;
-
-	//LLRect parent_local_snap_rect = mParentView->getLocalSnapRect();
-
-	//if (snap_type == SNAP_PARENT || snap_type == SNAP_PARENT_AND_SIBLINGS)
-	//{
-	//	if (llabs(parent_local_snap_rect.mRight - test_rect.mRight) <= x_threshold && (parent_local_snap_rect.mRight - test_rect.mRight) * mouse_dir.mX >= 0)
-	//	{
-	//		view_rect.translate(parent_local_snap_rect.mRight - view_rect.mRight, 0);
-	//		snap_view = mParentView;
-	//		x_threshold = llabs(parent_local_snap_rect.mRight - test_rect.mRight);
-	//	}
-
-	//	if (llabs(test_rect.mLeft - parent_local_snap_rect.mLeft) <= x_threshold && test_rect.mLeft * mouse_dir.mX <= 0)
-	//	{
-	//		view_rect.translate(parent_local_snap_rect.mLeft - view_rect.mLeft, 0);
-	//		snap_view = mParentView;
-	//		x_threshold = llabs(test_rect.mLeft - parent_local_snap_rect.mLeft);
-	//	}
-
-	//	if (llabs(test_rect.mBottom - parent_local_snap_rect.mBottom) <= y_threshold && test_rect.mBottom * mouse_dir.mY <= 0)
-	//	{
-	//		view_rect.translate(0, parent_local_snap_rect.mBottom - view_rect.mBottom);
-	//		snap_view = mParentView;
-	//		y_threshold = llabs(test_rect.mBottom - parent_local_snap_rect.mBottom);
-	//	}
-
-	//	if (llabs(parent_local_snap_rect.mTop - test_rect.mTop) <= y_threshold && (parent_local_snap_rect.mTop - test_rect.mTop) * mouse_dir.mY >= 0)
-	//	{
-	//		view_rect.translate(0, parent_local_snap_rect.mTop - view_rect.mTop);
-	//		snap_view = mParentView;
-	//		y_threshold = llabs(parent_local_snap_rect.mTop - test_rect.mTop);
-	//	}
-	//}
-	//if (snap_type == SNAP_SIBLINGS || snap_type == SNAP_PARENT_AND_SIBLINGS)
-	//{
-	//	for ( child_list_const_iter_t child_it = mParentView->getChildList()->begin();
-	//		  child_it != mParentView->getChildList()->end(); ++child_it)
-	//	{
-	//		LLView* siblingp = *child_it;
-
-	//		// skip non-snappable views (self, invisible views, etc)
-	//		if (!canSnapTo(siblingp)) continue;
-
-	//		LLRect sibling_rect = siblingp->getSnapRect();
-
-	//		if (llabs(test_rect.mRight - sibling_rect.mLeft) <= x_threshold 
-	//			&& (test_rect.mRight - sibling_rect.mLeft) * mouse_dir.mX <= 0)
-	//		{
-	//			view_rect.translate(sibling_rect.mLeft - view_rect.mRight, 0);
-	//			if (llabs(test_rect.mTop - sibling_rect.mTop) <= y_threshold && (test_rect.mTop - sibling_rect.mTop) * mouse_dir.mY <= 0)
-	//			{
-	//				view_rect.translate(0, sibling_rect.mTop - test_rect.mTop);
-	//				y_threshold = llabs(test_rect.mTop - sibling_rect.mTop);
-	//			}
-	//			else if (llabs(test_rect.mBottom - sibling_rect.mBottom) <= y_threshold && (test_rect.mBottom - sibling_rect.mBottom) * mouse_dir.mY <= 0)
-	//			{
-	//				view_rect.translate(0, sibling_rect.mBottom - test_rect.mBottom);
-	//				y_threshold = llabs(test_rect.mBottom - sibling_rect.mBottom);	
-	//			}
-	//			snap_view = siblingp;
-	//			x_threshold = llabs(test_rect.mRight - sibling_rect.mLeft);
-	//		}
-
-	//		if (llabs(test_rect.mLeft - sibling_rect.mRight) <= x_threshold 
-	//			&& (test_rect.mLeft - sibling_rect.mRight) * mouse_dir.mX <= 0)
-	//		{
-	//			view_rect.translate(sibling_rect.mRight - view_rect.mLeft, 0);
-	//			if (llabs(test_rect.mTop - sibling_rect.mTop) <= y_threshold && (test_rect.mTop - sibling_rect.mTop) * mouse_dir.mY <= 0)
-	//			{
-	//				view_rect.translate(0, sibling_rect.mTop - test_rect.mTop);
-	//				y_threshold = llabs(test_rect.mTop - sibling_rect.mTop);	
-	//			}
-	//			else if (llabs(test_rect.mBottom - sibling_rect.mBottom) <= y_threshold && (test_rect.mBottom - sibling_rect.mBottom) * mouse_dir.mY <= 0)
-	//			{
-	//				view_rect.translate(0, sibling_rect.mBottom - test_rect.mBottom);
-	//				y_threshold = llabs(test_rect.mBottom - sibling_rect.mBottom);	
-	//			}
-	//			snap_view = siblingp;
-	//			x_threshold = llabs(test_rect.mLeft - sibling_rect.mRight);
-	//		}
-
-	//		if (llabs(test_rect.mBottom - sibling_rect.mTop) <= y_threshold 
-	//			&& (test_rect.mBottom - sibling_rect.mTop) * mouse_dir.mY <= 0)
-	//		{
-	//			view_rect.translate(0, sibling_rect.mTop - view_rect.mBottom);
-	//			if (llabs(test_rect.mLeft - sibling_rect.mLeft) <= x_threshold && (test_rect.mLeft - sibling_rect.mLeft) * mouse_dir.mX <= 0)
-	//			{
-	//				view_rect.translate(sibling_rect.mLeft - test_rect.mLeft, 0);
-	//				x_threshold = llabs(test_rect.mLeft - sibling_rect.mLeft);
-	//			}
-	//			else if (llabs(test_rect.mRight - sibling_rect.mRight) <= x_threshold && (test_rect.mRight - sibling_rect.mRight) * mouse_dir.mX <= 0)
-	//			{
-	//				view_rect.translate(sibling_rect.mRight - test_rect.mRight, 0);
-	//				x_threshold = llabs(test_rect.mRight - sibling_rect.mRight);
-	//			}
-	//			snap_view = siblingp;
-	//			y_threshold = llabs(test_rect.mBottom - sibling_rect.mTop);
-	//		}
-
-	//		if (llabs(test_rect.mTop - sibling_rect.mBottom) <= y_threshold 
-	//			&& (test_rect.mTop - sibling_rect.mBottom) * mouse_dir.mY <= 0)
-	//		{
-	//			view_rect.translate(0, sibling_rect.mBottom - view_rect.mTop);
-	//			if (llabs(test_rect.mLeft - sibling_rect.mLeft) <= x_threshold && (test_rect.mLeft - sibling_rect.mLeft) * mouse_dir.mX <= 0)
-	//			{
-	//				view_rect.translate(sibling_rect.mLeft - test_rect.mLeft, 0);
-	//				x_threshold = llabs(test_rect.mLeft - sibling_rect.mLeft);
-	//			}
-	//			else if (llabs(test_rect.mRight - sibling_rect.mRight) <= x_threshold && (test_rect.mRight - sibling_rect.mRight) * mouse_dir.mX <= 0)
-	//			{
-	//				view_rect.translate(sibling_rect.mRight - test_rect.mRight, 0);
-	//				x_threshold = llabs(test_rect.mRight - sibling_rect.mRight);
-	//			}
-	//			snap_view = siblingp;
-	//			y_threshold = llabs(test_rect.mTop - sibling_rect.mBottom);
-	//		}
-	//	}
-	//}
-
-	//// shrink actual view rect back down
-	//view_rect.stretch(-padding);
-	//new_rect = view_rect;
-	//return snap_view;
 }
 
 LLView*	LLView::findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESnapEdge snap_edge, ESnapType snap_type, S32 threshold, S32 padding)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 9dac926..1ebe77a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -165,17 +165,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>AsyncKeyboard</key>
-    <map>
-      <key>Comment</key>
-      <string>Improves responsiveness to keyboard input when at low framerates</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>AuctionShowFence</key>
     <map>
       <key>Comment</key>
@@ -3971,7 +3960,18 @@
       <key>Value</key>
       <real>0.0</real>
     </map>
-    <key>InventoryAutoOpenDelay</key>
+	<key>InstallLanguage</key>
+	<map>
+		<key>Comment</key>
+		<string>Language passed from installer (for UI)</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>String</string>
+		<key>Value</key>
+		<string>default</string>
+	</map>
+	<key>InventoryAutoOpenDelay</key>
     <map>
       <key>Comment</key>
       <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
@@ -4210,7 +4210,7 @@
     <key>Language</key>
     <map>
       <key>Comment</key>
-      <string>Language specifier (for XUI)</string>
+      <string>Language specifier (for UI)</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -7659,7 +7659,7 @@
     <key>SystemLanguage</key>
     <map>
       <key>Comment</key>
-      <string>Language indicated by system settings (for XUI)</string>
+      <string>Language indicated by system settings (for UI)</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
index eee1831..150e7f3 100644
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -193,6 +193,7 @@ NVIDIA GeForce 8200				.*NVIDIA.*GeForce 82.*				1		1
 NVIDIA GeForce 8300				.*NVIDIA.*GeForce 83.*				1		1
 NVIDIA GeForce 8400				.*NVIDIA.*GeForce 84.*				1		1
 NVIDIA GeForce 8500				.*GeForce 85.*						3		1
+NVIDIA GeForce 8600M			.*NVIDIA.*GeForce.*8600M.*			1		1
 NVIDIA GeForce 8600				.*NVIDIA.*GeForce 86.*				3		1
 NVIDIA GeForce 8700				.*NVIDIA.*GeForce 87.*				3		1
 NVIDIA GeForce 8800				.*NVIDIA.*GeForce 88.*				3		1
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 01bd98f..db9f565 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -31,15 +31,27 @@ RequestExecutionLevel admin	; on Vista we must be admin because we write to Prog
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 !include "%%SOURCE%%\installers\windows\lang_de.nsi"
 !include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
-!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
-!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
 !include "%%SOURCE%%\installers\windows\lang_es.nsi"
+!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
+!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
 !include "%%SOURCE%%\installers\windows\lang_it.nsi"
+!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
 !include "%%SOURCE%%\installers\windows\lang_nl.nsi"
+!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
 !include "%%SOURCE%%\installers\windows\lang_zh.nsi"
 
+# *TODO: Move these into the language files themselves
+LangString LanguageCode ${LANG_GERMAN}   "de"
+LangString LanguageCode ${LANG_ENGLISH}  "en"
+LangString LanguageCode ${LANG_SPANISH}  "es"
+LangString LanguageCode ${LANG_FRENCH}   "fr"
+LangString LanguageCode ${LANG_JAPANESE} "ja"
+LangString LanguageCode ${LANG_ITALIAN}  "it"
+LangString LanguageCode ${LANG_KOREAN}   "ko"
+LangString LanguageCode ${LANG_DUTCH}    "nl"
+LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
+LangString LanguageCode ${LANG_SIMPCHINESE}  "zh"
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
 ;; For example:
@@ -79,6 +91,7 @@ Var INSTEXE
 Var INSTFLAGS
 Var INSTSHORTCUT
 Var COMMANDLINE         ; command line passed to this installer, set in .onInit
+Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
 
 ;;; Function definitions should go before file includes, because calls to
 ;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
@@ -107,7 +120,7 @@ label_ask_launch:
         
 label_launch:
 	# Assumes SetOutPath $INSTDIR
-	Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS'
+	Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
 label_no_launch:
 	Pop $R0
 FunctionEnd
@@ -725,13 +738,15 @@ Call RemoveOldReleaseNotes
 ;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 %%INSTALL_FILES%%
 
+# Pass the installer's language to the client to use as a default
+StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Shortcuts in start menu
 CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
 SetOutPath "$INSTDIR"
 CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
-				"$INSTDIR\$INSTEXE" "$INSTFLAGS"
+				"$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
 
 
 WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
@@ -749,8 +764,10 @@ CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Other shortcuts
 SetOutPath "$INSTDIR"
-CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
-CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
+CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
+        "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
+        "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
 CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
 				'"$INSTDIR\uninst.exe"' ''
 
diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi
index 911ed74..b717a4d 100644
Binary files a/indra/newview/installers/windows/lang_de.nsi and b/indra/newview/installers/windows/lang_de.nsi differ
diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi
index 3340a12..c6a7f38 100644
Binary files a/indra/newview/installers/windows/lang_es.nsi and b/indra/newview/installers/windows/lang_es.nsi differ
diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi
index 5c17ad0..d23615d 100644
Binary files a/indra/newview/installers/windows/lang_fr.nsi and b/indra/newview/installers/windows/lang_fr.nsi differ
diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi
index 9f18013..1208ec4 100644
Binary files a/indra/newview/installers/windows/lang_it.nsi and b/indra/newview/installers/windows/lang_it.nsi differ
diff --git a/indra/newview/installers/windows/lang_nl.nsi b/indra/newview/installers/windows/lang_nl.nsi
index 42453ba..c8ffa8b 100644
Binary files a/indra/newview/installers/windows/lang_nl.nsi and b/indra/newview/installers/windows/lang_nl.nsi differ
diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi
index 6524cc7..da56a3c 100644
Binary files a/indra/newview/installers/windows/lang_pt-br.nsi and b/indra/newview/installers/windows/lang_pt-br.nsi differ
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
index e644e63..f4b7b5d 100644
Binary files a/indra/newview/installers/windows/lang_zh.nsi and b/indra/newview/installers/windows/lang_zh.nsi differ
diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp
index 5656f76..04703ef 100644
--- a/indra/newview/llagentlanguage.cpp
+++ b/indra/newview/llagentlanguage.cpp
@@ -31,13 +31,17 @@
 
 #include "llviewerprecompiledheaders.h"
 #include "llagentlanguage.h"
+// viewer includes
 #include "llagent.h"
 #include "llviewercontrol.h"
 #include "llviewerregion.h"
+// library includes
+#include "llui.h"					// getLanguage()
 
 LLAgentLanguage::LLAgentLanguage()
 {
 	gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&update));
+	gSavedSettings.getControl("InstallLanguage")->getSignal()->connect(boost::bind(&update));
 	gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&update));
 	gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&update));
 }
@@ -51,9 +55,7 @@ bool LLAgentLanguage::update()
 	std::string url = gAgent.getRegion()->getCapability("UpdateAgentLanguage");
 	if (!url.empty())
 	{
-		std::string language = gSavedSettings.getString("Language");
-		if (language == "default")
-			language = gSavedSettings.getString("SystemLanguage");
+		std::string language = LLUI::getLanguage();
 		
 		body["language"] = language;
 		body["language_is_public"] = gSavedSettings.getBOOL("LanguageIsPublic");
@@ -62,4 +64,3 @@ bool LLAgentLanguage::update()
 	}
     return true;
 }
-
diff --git a/indra/newview/llagentlanguage.h b/indra/newview/llagentlanguage.h
index d86a8f1..2189455 100644
--- a/indra/newview/llagentlanguage.h
+++ b/indra/newview/llagentlanguage.h
@@ -32,7 +32,7 @@
 #ifndef LL_LLAGENTLANGUAGE_H
 #define LL_LLAGENTLANGUAGE_H
 
-#include "llmemory.h"
+#include "llmemory.h"	// LLSingleton<>
 #include "llevent.h"
 
 class LLAgentLanguage: public LLSingleton<LLAgentLanguage>, public LLSimpleListener
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 49991b4..35acafc 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -202,8 +202,6 @@ extern BOOL gDebugGL;
 
 ////////////////////////////////////////////////////////////
 // All from the last globals push...
-BOOL gHandleKeysAsync = FALSE;
-
 const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard
 
 F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
@@ -234,7 +232,7 @@ F32 gFPSClamped = 10.f;						// Pretend we start at target rate.
 F32 gFrameDTClamped = 0.f;					// Time between adjacent checks to network for packets
 U64	gStartTime = 0; // gStartTime is "private", used only to calculate gFrameTimeSeconds
 U32 gFrameStalls = 0;
-const F64 FRAME_STALL_THRESHOLD = 5.0;
+const F64 FRAME_STALL_THRESHOLD = 1.0;
 
 LLTimer gRenderStartTime;
 LLFrameTimer gForegroundTime;
@@ -404,7 +402,6 @@ static void settings_to_globals()
 	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
 	gMapScale = gSavedSettings.getF32("MapScale");
 	gMiniMapScale = gSavedSettings.getF32("MiniMapScale");
-	gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");
 	LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips");
 
 	LLCubeMap::sUseCubeMaps = LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap");
@@ -1379,14 +1376,17 @@ bool LLAppViewer::cleanup()
 	LLWatchdog::getInstance()->cleanup();
 
 	end_messaging_system();
+	llinfos << "Message system deleted." << llendflush;
 
 	// *NOTE:Mani - The following call is not thread safe. 
 	LLCurl::cleanupClass();
+	llinfos << "LLCurl cleaned up." << llendflush;
 
 	// If we're exiting to launch an URL, do that here so the screen
 	// is at the right resolution before we launch IE.
 	if (!gLaunchFileOnQuit.empty())
 	{
+		llinfos << "Launch file on quit." << llendflush;
 #if LL_WINDOWS
 		// Indicate an application is starting.
 		SetCursor(LoadCursor(NULL, IDC_WAIT));
@@ -1396,6 +1396,7 @@ bool LLAppViewer::cleanup()
 		ms_sleep(1000);
 
 		LLWeb::loadURLExternal( gLaunchFileOnQuit );
+		llinfos << "File launched." << llendflush;
 	}
 
     llinfos << "Goodbye" << llendflush;
@@ -2149,7 +2150,6 @@ void LLAppViewer::cleanupSavedSettings()
 
 	gSavedSettings.setF32("MapScale", gMapScale );
 	gSavedSettings.setF32("MiniMapScale", gMiniMapScale );
-	gSavedSettings.setBOOL("AsyncKeyboard", gHandleKeysAsync);
 	gSavedSettings.setBOOL("ShowHoverTips", LLHoverView::sShowHoverTips);
 
 	// Some things are cached in LLAgent.
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 6545a61..3b67f60 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -238,7 +238,6 @@ const S32 AGENT_UPDATES_PER_SECOND  = 10;
 //
 // "// llstartup" indicates that llstartup is the only client for this global.
 
-extern BOOL gHandleKeysAsync; // gSavedSettings used by llviewerdisplay.cpp & llviewermenu.cpp
 extern LLSD gDebugInfo;
 
 extern BOOL	gAllowIdleAFK;
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index bf02087..2a6fd60 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -85,6 +85,7 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti
 	
     // Translate the signals/exceptions into cross-platform stuff
 	// Windows implementation
+    _tprintf( _T("Entering Windows Exception Handler...\n") );
 	llinfos << "Entering Windows Exception Handler..." << llendl;
 
 	// Make sure the user sees something to indicate that the app crashed.
@@ -92,6 +93,7 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti
 
 	if (LLApp::isError())
 	{
+	    _tprintf( _T("Got another fatal signal while in the error handler, die now!\n") );
 		llwarns << "Got another fatal signal while in the error handler, die now!" << llendl;
 
 		retval = EXCEPTION_EXECUTE_HANDLER;
@@ -122,6 +124,7 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti
 	return retval;
 }
 
+//#define DEBUGGING_SEH_FILTER 1
 #if DEBUGGING_SEH_FILTER
 #	define WINMAIN DebuggingWinMain
 #else
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 7883953..8a4669f 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -29,11 +29,11 @@
  * $/LicenseInfo$
  */
 
+#include "llviewerprecompiledheaders.h"
+
 #include <iostream>
 #include <fstream>
 
-#include "llviewerprecompiledheaders.h"
-
 #include <boost/regex.hpp>
 
 #include "llfeaturemanager.h"
diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp
index cfdaba5..56a4a64 100644
--- a/indra/newview/llfloaterhud.cpp
+++ b/indra/newview/llfloaterhud.cpp
@@ -84,12 +84,7 @@ LLFloaterHUD::LLFloaterHUD()
 		// arrow keys during tutorial).
 		mWebBrowser->setTakeFocusOnClick(false);
 
-		std::string language(gSavedSettings.getString("Language"));
-		if(language == "default")
-		{
-			language = gSavedSettings.getString("SystemLanguage");
-		}
-	
+		std::string language = LLUI::getLanguage();
 		std::string base_url = gSavedSettings.getString("TutorialURL");
 
 		std::string url = base_url + language + "/";
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 4be8145..a3a7527 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -245,7 +245,7 @@ void LLFloaterPostcard::onClickSend(void* data)
 		std::string from(self->childGetValue("from_form").asString());
 		std::string to(self->childGetValue("to_form").asString());
 		
-		boost::regex emailFormat("[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}");
+		boost::regex emailFormat("[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}(,[ \t]*[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})*");
 		
 		if (to.empty() || !boost::regex_match(to, emailFormat))
 		{
diff --git a/indra/newview/llpaneldirfind.cpp b/indra/newview/llpaneldirfind.cpp
index cc0a700..1b610fb 100644
--- a/indra/newview/llpaneldirfind.cpp
+++ b/indra/newview/llpaneldirfind.cpp
@@ -321,15 +321,8 @@ std::string LLPanelDirFind::getSearchURLSuffix(bool mature_in)
 	substring = "[SESSION]";
 	url.replace(url.find(substring), substring.length(), session_string);
 
-	// set the currently selected lanaguage by asking the pref setting
-	std::string language_string = LLUI::sConfigGroup->getString( "Language" );
-	if ( language_string == "default" ) 
-	{
-		// if "default system language" setting used, ask again
-		// (we can't do this directly since it can vary if you install
-		// under one language and select a different one using prefs)
-		language_string = gSavedSettings.getString( "SystemLanguage" );
-	}
+	// set the currently selected language by asking the pref setting
+	std::string language_string = LLUI::getLanguage();
 	std::string language_tag = "[LANG]";
 	url.replace( url.find( language_tag ), language_tag.length(), language_string );
 
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index c1c8949..af85c44 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -925,11 +925,7 @@ void LLPanelLogin::loadLoginPage()
 	}
 
 	// Language
-	std::string language(gSavedSettings.getString("Language"));
-	if(language == "default")
-	{
-		language = gSavedSettings.getString("SystemLanguage");
-	}
+	std::string language = LLUI::getLanguage();
 	oStr << first_query_delimiter<<"lang=" << language;
 	
 	// First Login?
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 6247686..d7baa58 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -118,10 +118,14 @@ void validate_drawable(LLDrawable* drawablep)
 
 S32 AABBSphereIntersect(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &rad)
 {
+	return AABBSphereIntersectR2(min, max, origin, rad*rad);
+}
+
+S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &r)
+{
 	F32 d = 0.f;
 	F32 t;
-	F32 r = rad*rad;
-
+	
 	if ((min-origin).magVecSquared() < r &&
 		(max-origin).magVecSquared() < r)
 	{
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index f42d55b..da842f9 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -52,6 +52,7 @@ class LLSpatialBridge;
 class LLSpatialGroup;
 
 S32 AABBSphereIntersect(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &rad);
+S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &radius_squared);
 
 class LLDrawInfo : public LLRefCount 
 {
diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp
index ac3fa93..0dadbd0 100644
--- a/indra/newview/llurlhistory.cpp
+++ b/indra/newview/llurlhistory.cpp
@@ -72,9 +72,16 @@ bool LLURLHistory::loadFile(const std::string& filename)
 
 // static
 bool LLURLHistory::saveFile(const std::string& filename)
-{
-	std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
-	llofstream out((temp_str + filename));
+{	
+	std::string temp_str = gDirUtilp->getLindenUserDir();
+	if( temp_str.empty() )
+	{
+		llwarns << "Can't save. No user directory set." << llendl;
+		return false;
+	}
+
+	temp_str += gDirUtilp->getDirDelimiter() + filename;
+	llofstream out(temp_str);
 	if (!out.good())
 	{
 		llwarns << "Unable to open " << filename << " for output." << llendl;
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index 03e5b40..233e184 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -29,9 +29,9 @@
  * $/LicenseInfo$
  */
 
+#include "llviewerprecompiledheaders.h"
 
 #include "linden_common.h"
-#include "llviewerprecompiledheaders.h"
 
 #include "llagent.h"
 #include "llviewerassetstorage.h"
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 4db26a0..40bb83c 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -113,7 +113,6 @@ void render_ui_3d();
 void render_ui_2d();
 void render_disconnected_background();
 void render_hud_elements();
-void process_keystrokes_async();
 
 void display_startup()
 {
@@ -684,7 +683,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 		}
 
-		LLAppViewer::instance()->pingMainloopTimeout("Display:Render");
+		LLAppViewer::instance()->pingMainloopTimeout("Display:RenderStart");
 		
 		//// render frontmost floater opaque for occlusion culling purposes
 		//LLFloater* frontmost_floaterp = gFloaterView->getFrontmost();
@@ -730,10 +729,13 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 			gGL.setColorMask(true, false);
 		}
-
+		
+		LLAppViewer::instance()->pingMainloopTimeout("Display:RenderGeom");
+		
 		if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot())
 				&& !gRestoreGL)
 		{
+
 			gGL.setColorMask(true, false);
 			LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
 			gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
@@ -748,9 +750,12 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 			}
 			stop_glerror();
 		}
+
+		LLAppViewer::instance()->pingMainloopTimeout("Display:RenderFlush");		
 		
 		if (to_texture)
 		{
+
 			gPipeline.mScreen.flush();
 		}
 
@@ -759,23 +764,20 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		/// Using render to texture would be faster/better, but I don't have a 
 		/// grasp of their full display stack just yet.
 		// gPostProcess->apply(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
-
+		
+		LLAppViewer::instance()->pingMainloopTimeout("Display:RenderUI");
+		
 		if (!for_snapshot)
 		{
+			gFrameStats.start(LLFrameStats::RENDER_UI);
 			render_ui();
 		}
 
 		LLSpatialGroup::sNoDelete = FALSE;
 	}
-	gFrameStats.start(LLFrameStats::RENDER_UI);
-
-	if (gHandleKeysAsync)
-	{
-		LLAppViewer::instance()->pingMainloopTimeout("Display:Keystrokes");
-		process_keystrokes_async();
-		stop_glerror();
-	}
-
+	
+	LLAppViewer::instance()->pingMainloopTimeout("Display:FrameStats");
+	
 	gFrameStats.start(LLFrameStats::MISC_END);
 	stop_glerror();
 
@@ -1231,43 +1233,3 @@ void display_cleanup()
 {
 	gDisconnectedImagep = NULL;
 }
-
-void process_keystrokes_async()
-{
-#if LL_WINDOWS
-	MSG			msg;
-	// look through all input messages, leaving them in the event queue
-	while( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE | PM_NOYIELD))
-	{
-		// on first mouse message, break out
-		if (msg.message >= WM_MOUSEFIRST && 
-			msg.message <= WM_MOUSELAST ||
-			msg.message == WM_QUIT)
-		{
-			break;
-		}
-
-		// this is a message we want to handle now, so remove it from the event queue
-		PeekMessage(&msg, NULL, msg.message, msg.message, PM_REMOVE | PM_NOYIELD);
-		//		if (msg.message == WM_KEYDOWN)
-		//		{
-		//			llinfos << "Process async key down " << (U32)msg.wParam << llendl;
-		//		}
-		TranslateMessage(&msg);
-		DispatchMessage(&msg);
-	}
-
-	// Scan keyboard for movement keys.  Command keys and typing
-	// are handled by windows callbacks.  Don't do this until we're
-	// done initializing.  JC
-	if (gViewerWindow->mWindow->getVisible() 
-		&& gViewerWindow->getActive()
-		&& !gViewerWindow->mWindow->getMinimized()
-		&& LLStartUp::getStartupState() == STATE_STARTED
-		&& !gViewerWindow->getShowProgress()
-		&& !gFocusMgr.focusLocked())
-	{
-		gKeyboard->scanKeyboard();
-	}
-#endif
-}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 9782d4b..7c08c8a 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1020,7 +1020,6 @@ void init_debug_ui_menu(LLMenuGL* menu)
 {
 	menu->append(new LLMenuItemCallGL("SLURL Test", &handle_slurl_test));
 	menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui));
-	menu->append(new LLMenuItemToggleGL("Async Keystrokes", &gHandleKeysAsync));
 	menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr));
 	menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory));
 	menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 30e5e26..63bc9c7 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -203,7 +203,7 @@ struct LLFriendshipOffer
 void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_group,
 				S32 trx_type, const std::string& desc)
 {
-	if(0 == amount) return;
+	if(0 == amount || !region) return;
 	amount = abs(amount);
 	LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL;
 	if(can_afford_transaction(amount))
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 9034634..4010dc1 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -680,8 +680,7 @@ void send_stats()
 	// send fps only for time app spends in foreground
 	agent["fps"] = (F32)gForegroundFrameCount / gForegroundTime.getElapsedTimeF32();
 	agent["version"] = gCurrentVersion;
-	std::string language(gSavedSettings.getString("Language"));
-	if(language == "default") language = gSavedSettings.getString("SystemLanguage");	
+	std::string language = LLUI::getLanguage();
 	agent["language"] = language;
 	
 	agent["sim_fps"] = ((F32) gFrameCount - gSimFrames) /
@@ -760,8 +759,12 @@ void send_stats()
 	// misc["string_2"] = 
 // 	misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6
 // 	misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6
-	misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21
-	misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21
+// 	misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21
+// 	misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21
+	F32 unbaked_time = LLVOAvatar::sUnbakedTime / gFrameTime;
+	misc["int_1"] = LLSD::Integer(unbaked_time * 1000.f); // Steve: 1.22
+	F32 grey_time = LLVOAvatar::sGreyTime / gFrameTime;
+	misc["int_2"] = LLSD::Integer(grey_time * 1000.f); // Steve: 1.22
 	
 	LLViewerStats::getInstance()->addToMessage(body);
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 106ad08..109b3c2 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -29,13 +29,13 @@
  * $/LicenseInfo$
  */
 
+#include "llviewerprecompiledheaders.h"
+
 // system library includes
 #include <stdio.h>
 #include <iostream>
 #include <fstream>
 
-#include "llviewerprecompiledheaders.h"
-
 #include "llpanellogin.h"
 #include "llviewerkeyboard.h"
 #include "llviewerwindow.h"
@@ -3560,7 +3560,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 	LLVector3 mouse_hud_end   = mouse_point_hud + LLVector3(depth, 0, 0);
 	
 	// world coordinates of mouse
-	LLVector3		mouse_direction_global = mouseDirectionGlobal(x,y);
+	LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y);
 	LLVector3 mouse_point_global = LLViewerCamera::getInstance()->getOrigin();
 	LLVector3 mouse_world_start = mouse_point_global;
 	LLVector3 mouse_world_end   = mouse_point_global + mouse_direction_global * depth;
@@ -5202,7 +5202,7 @@ void LLPickInfo::fetchResults()
 	LLVector3 intersection, normal, binormal;
 	LLVector2 uv;
 
-	LLViewerObject* hit_object = gViewerWindow->cursorIntersect(-1, -1, 512.f,
+	LLViewerObject* hit_object = gViewerWindow->cursorIntersect(mMousePt.mX, mMousePt.mY, 512.f,
 									NULL, -1, mPickTransparent, &face_hit,
 									&intersection, &uv, &normal, &binormal);
 	
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index c3ad4f9..557a6d9 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -272,6 +272,7 @@ LLUUID LLVOAvatar::sStepSounds[LL_MCODE_END] =
 	LLUUID(SND_RUBBER_RUBBER)
 };
 
+// static
 S32 LLVOAvatar::sRenderName = RENDER_NAME_ALWAYS;
 BOOL LLVOAvatar::sRenderGroupTitles = TRUE;
 S32 LLVOAvatar::sNumVisibleChatBubbles = 0;
@@ -284,9 +285,10 @@ BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;
 F32 LLVOAvatar::sLODFactor = 1.f;
 BOOL LLVOAvatar::sUseImpostors = FALSE;
 BOOL LLVOAvatar::sJointDebug = FALSE;
-
 S32 LLVOAvatar::sCurJoint = 0;
 S32 LLVOAvatar::sCurVolume = 0;
+F32 LLVOAvatar::sUnbakedTime = 0.f;
+F32 LLVOAvatar::sGreyTime = 0.f;
 
 struct LLAvatarTexData
 {
@@ -1070,8 +1072,10 @@ void LLVOAvatar::deleteLayerSetCaches()
 }
 
 // static 
-BOOL LLVOAvatar::areAllNearbyInstancesBaked()
+BOOL LLVOAvatar::areAllNearbyInstancesBaked(S32& grey_avatars)
 {
+	BOOL res = TRUE;
+	grey_avatars = 0;
 	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
 		iter != LLCharacter::sInstances.end(); ++iter)
 	{
@@ -1080,18 +1084,22 @@ BOOL LLVOAvatar::areAllNearbyInstancesBaked()
 		{
 			continue;
 		}
-		else
-		if( inst->getPixelArea() < MIN_PIXEL_AREA_FOR_COMPOSITE )
-		{
-			return TRUE;  // Assumes sInstances is sorted by pixel area.
-		}
+// 		else
+// 		if( inst->getPixelArea() < MIN_PIXEL_AREA_FOR_COMPOSITE )
+// 		{
+// 			return res;  // Assumes sInstances is sorted by pixel area.
+// 		}
 		else
 		if( !inst->isFullyBaked() )
 		{
-			return FALSE;
+			res = FALSE;
+			if (inst->mHasGrey)
+			{
+				++grey_avatars;
+			}
 		}
 	}
-	return TRUE;
+	return res;
 }
 
 // static 
@@ -1602,7 +1610,7 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 		)
 {
 
-	if (mIsSelf && !gAgent.needsRenderAvatar())
+	if (mIsSelf && !gAgent.needsRenderAvatar() || !LLPipeline::sPickAvatar)
 	{
 		return FALSE;
 	}
@@ -4523,6 +4531,7 @@ void LLVOAvatar::updateTextures(LLAgent &agent)
 
 	mMaxPixelArea = 0.f;
 	mMinPixelArea = 99999999.f;
+	mHasGrey = FALSE; // debug
 	for (U32 i = 0; i < getNumTEs(); i++)
 	{
 		LLViewerImage *imagep = getTEImage(i);
@@ -4681,22 +4690,35 @@ void LLVOAvatar::updateTextures(LLAgent &agent)
 void LLVOAvatar::addLocalTextureStats( LLVOAvatar::ELocTexIndex idx, LLViewerImage* imagep,
 									   F32 texel_area_ratio, BOOL render_avatar, BOOL covered_by_baked )
 {
-	if (!covered_by_baked &&
-		render_avatar && // always true if mIsSelf
-		mLocalTexture[ idx ].notNull() && mLocalTexture[idx]->getID() != IMG_DEFAULT_AVATAR)
-	{	
-		F32 desired_pixels;
-		if( mIsSelf )
+	if (!covered_by_baked && render_avatar) // render_avatar is always true if mIsSelf
+	{
+		if (mLocalTexture[ idx ].notNull() && mLocalTexture[idx]->getID() != IMG_DEFAULT_AVATAR)
 		{
-			desired_pixels = llmin(mPixelArea, (F32)LOCTEX_IMAGE_AREA_SELF );
-			imagep->setBoostLevel(LLViewerImage::BOOST_AVATAR_SELF);
+			F32 desired_pixels;
+			if( mIsSelf )
+			{
+				desired_pixels = llmin(mPixelArea, (F32)LOCTEX_IMAGE_AREA_SELF );
+				imagep->setBoostLevel(LLViewerImage::BOOST_AVATAR_SELF);
+			}
+			else
+			{
+				desired_pixels = llmin(mPixelArea, (F32)LOCTEX_IMAGE_AREA_OTHER );
+				imagep->setBoostLevel(LLViewerImage::BOOST_AVATAR);
+			}
+			imagep->addTextureStats( desired_pixels, texel_area_ratio );
+			if (imagep->getDiscardLevel() < 0)
+			{
+				mHasGrey = TRUE; // for statistics gathering
+			}
 		}
 		else
 		{
-			desired_pixels = llmin(mPixelArea, (F32)LOCTEX_IMAGE_AREA_OTHER );
-			imagep->setBoostLevel(LLViewerImage::BOOST_AVATAR);
+			if (mLocalTexture[idx]->getID() == IMG_DEFAULT_AVATAR)
+			{
+				// texture asset is missing
+				mHasGrey = TRUE; // for statistics gathering
+			}
 		}
-		imagep->addTextureStats( desired_pixels, texel_area_ratio );
 	}
 }
 
@@ -9126,10 +9148,17 @@ void LLVOAvatar::cullAvatarsByPixelArea()
 		}
 	}
 
-	if( LLVOAvatar::areAllNearbyInstancesBaked() )
+	S32 grey_avatars = 0;
+	if( LLVOAvatar::areAllNearbyInstancesBaked(grey_avatars) )
 	{
 		LLVOAvatar::deleteCachedImages();
 	}
+	else
+	{
+		sUnbakedTime += gFrameTimeSeconds;
+		if (grey_avatars > 0)
+			sGreyTime += gFrameTimeSeconds;
+	}
 }
 
 const LLUUID& LLVOAvatar::grabLocalTexture(ETextureIndex index)
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 8265e8a..802d3a0 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -913,6 +913,9 @@ public:
 	static BOOL		sJointDebug;
 	static ETextureIndex sBakedTextureIndices[BAKED_TEXTURE_COUNT];
 
+	static F32 		sUnbakedTime; // Total seconds with >=1 unbaked avatars
+	static F32 		sGreyTime; // Total seconds with >=1 grey avatars
+	
 	//--------------------------------------------------------------------
 	// Texture Layer Sets and Global Colors
 	//--------------------------------------------------------------------	
@@ -977,6 +980,7 @@ protected:
 	F32					mLastFadeDistance;
 	F32					mMinPixelArea; // debug
 	F32					mMaxPixelArea; // debug
+	BOOL				mHasGrey; // debug
 	
 	//--------------------------------------------------------------------
 	// Global Colors
@@ -1012,7 +1016,7 @@ protected:
 	
 	BOOL			isFullyBaked();
 	void			deleteLayerSetCaches();
-	static BOOL		areAllNearbyInstancesBaked();
+	static BOOL		areAllNearbyInstancesBaked(S32& grey_avatars);
 
 	static void		onBakedTextureMasksLoaded(BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
 
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index 7055b30..9bb801a 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -945,45 +945,55 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect
 
 	//step one meter at a time until intersection point found
 
+	const LLVector3* ext = mDrawable->getSpatialExtents();
+	F32 rad = (delta*tdelta).magVecSquared();
+
 	F32 t = 0.f;
 	while ( t <= 1.f)
 	{
 		LLVector3 sample = origin + delta*t;
 		
-		F32 height = mRegionp->getLandHeightRegion(sample);
-		if (height > sample.mV[2])
-		{ //ray went below ground, positive intersection
-			//quick and dirty binary search to get impact point
-			tdelta = -tdelta*0.5f;
-			F32 err_dist = 0.001f;
-			F32 dist = fabsf(sample.mV[2] - height);
-
-			while (dist > err_dist && tdelta*tdelta > 0.0f)
-			{
-				t += tdelta;
-				sample = origin+delta*t;
-				height = mRegionp->getLandHeightRegion(sample);
-				if ((tdelta < 0 && height < sample.mV[2]) ||
-					(height > sample.mV[2] && tdelta > 0))
-				{ //jumped over intersection point, go back
-					tdelta = -tdelta;
+		if (AABBSphereIntersectR2(ext[0], ext[1], sample+mRegionp->getOriginAgent(), rad))
+		{
+			F32 height = mRegionp->getLandHeightRegion(sample);
+			if (height > sample.mV[2])
+			{ //ray went below ground, positive intersection
+				//quick and dirty binary search to get impact point
+				tdelta = -tdelta*0.5f;
+				F32 err_dist = 0.001f;
+				F32 dist = fabsf(sample.mV[2] - height);
+
+				while (dist > err_dist && tdelta*tdelta > 0.0f)
+				{
+					t += tdelta;
+					sample = origin+delta*t;
+					height = mRegionp->getLandHeightRegion(sample);
+					if ((tdelta < 0 && height < sample.mV[2]) ||
+						(height > sample.mV[2] && tdelta > 0))
+					{ //jumped over intersection point, go back
+						tdelta = -tdelta;
+					}
+					tdelta *= 0.5f;
+					dist = fabsf(sample.mV[2] - height);
 				}
-				tdelta *= 0.5f;
-				dist = fabsf(sample.mV[2] - height);
-			}
 
-			if (intersection)
-			{
-				sample.mV[2] = mRegionp->getLandHeightRegion(sample);
-				*intersection = sample + mRegionp->getOriginAgent();
-			}
+				if (intersection)
+				{
+					F32 height = mRegionp->getLandHeightRegion(sample);
+					if (fabsf(sample.mV[2]-height) < delta.length()*tdelta)
+					{
+						sample.mV[2] = mRegionp->getLandHeightRegion(sample);
+					}
+					*intersection = sample + mRegionp->getOriginAgent();
+				}
 
-			if (normal)
-			{
-				*normal = mRegionp->getLand().resolveNormalGlobal(mRegionp->getPosGlobalFromRegion(sample));
-			}
+				if (normal)
+				{
+					*normal = mRegionp->getLand().resolveNormalGlobal(mRegionp->getPosGlobalFromRegion(sample));
+				}
 
-			return TRUE;
+				return TRUE;
+			}
 		}
 
 		t += tdelta;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 47289ff..a1ca61f 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1998,7 +1998,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 			face_hit = volume->lineSegmentIntersect(v_start, v_end, i,
 													&p, &tc, &n, &bn);
 			
-			if (face_hit >= 0)
+			if (face_hit >= 0 && mDrawable->getNumFaces() > face_hit)
 			{
 				LLFace* face = mDrawable->getFace(face_hit);
 				if (pick_transparent || !face->getTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n)))
diff --git a/indra/newview/llwebbrowserctrl.cpp b/indra/newview/llwebbrowserctrl.cpp
index 8c56e5c..0598a63 100644
--- a/indra/newview/llwebbrowserctrl.cpp
+++ b/indra/newview/llwebbrowserctrl.cpp
@@ -483,13 +483,7 @@ void LLWebBrowserCtrl::navigateTo( std::string urlIn )
 
 void LLWebBrowserCtrl::navigateToLocalPage( const std::string& subdir, const std::string& filename_in )
 {
-	std::string language = gSavedSettings.getString("Language");
-	
-	if(language == "default")
-	{
-		language = gSavedSettings.getString("SystemLanguage");
-	}
-
+	std::string language = LLUI::getLanguage();
 	std::string delim = gDirUtilp->getDirDelimiter();
 	std::string filename;
 
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 81f1a90..51ea557 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -220,6 +220,7 @@ void display_update_camera();
 
 S32		LLPipeline::sCompiles = 0;
 
+BOOL	LLPipeline::sPickAvatar = TRUE;
 BOOL	LLPipeline::sDynamicLOD = TRUE;
 BOOL	LLPipeline::sShowHUDAttachments = TRUE;
 BOOL	LLPipeline::sRenderPhysicalBeacons = TRUE;
@@ -2342,7 +2343,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 		}
 	}
 
-	
+	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:ForceVBO");
 	
 	//by bao
 	//fake vertex buffer updating
@@ -2389,12 +2390,16 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 	
 	U32 cur_type = 0;
 
+	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDrawPools");
+	
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PICKING))
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderForSelect");
 		gObjectList.renderObjectsForSelect(camera, gViewerWindow->getVirtualWindowRect());
 	}
 	else if (gSavedSettings.getBOOL("RenderDeferred"))
 	{
+		LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDeferred");
 		renderGeomDeferred();
 	}
 	else
@@ -2482,6 +2487,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 			stop_glerror();
 		}
 	}
+	
+	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDrawPoolsEnd");
 
 	LLVertexBuffer::unbind();
 	LLGLState::checkStates();
@@ -2505,6 +2512,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 	LLGLState::checkTextureChannels();
 	LLGLState::checkClientArrays();
 
+	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights");
+
 	if (!sReflectionRender)
 	{
 		renderHighlights();
@@ -2514,6 +2523,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 	// have touch-handlers.
 	mHighlightFaces.clear();
 
+	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug");
+	
 	renderDebug();
 
 	LLVertexBuffer::unbind();
@@ -2526,6 +2537,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
 		gObjectList.resetObjectBeacons();
 	}
 
+	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
+
 	//HACK: preserve/restore matrices around HUD render
 	if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
 	{
@@ -4022,6 +4035,8 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 
 	LLVector3 position;
 
+	sPickAvatar = LLToolMgr::getInstance()->inBuildMode() ? FALSE : TRUE;
+	
 	for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 
 			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
 	{
@@ -4048,6 +4063,31 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 			}
 		}
 	}
+	
+	if (!sPickAvatar)
+	{
+		if (!drawable || !drawable->getVObj()->isAttachment())
+		{ //check against avatars
+				sPickAvatar = TRUE;
+				for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 
+						iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
+				{
+					LLViewerRegion* region = *iter;
+
+					LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_BRIDGE);
+					if (part && hasRenderType(part->mDrawableType))
+					{
+						LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, bi_normal);
+						if (hit)
+						{
+							drawable = hit;
+							local_end = position;						
+						}
+					}
+				}
+			}
+		}
+
 
 	//check all avatar nametags (silly, isn't it?)
 	for (std::vector< LLCharacter* >::iterator iter = LLCharacter::sInstances.begin();
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index c795283..560f21f 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -383,6 +383,7 @@ public:
 	static BOOL				sSkipUpdate; //skip lod updates
 	static BOOL				sWaterReflections;
 	static BOOL				sDynamicLOD;
+	static BOOL				sPickAvatar;
 	static BOOL				sReflectionRender;
 	static BOOL				sImpostorRender;
 	static BOOL				sUnderWaterRender;
diff --git a/indra/newview/skins/default/xui/de/alerts.xml b/indra/newview/skins/default/xui/de/alerts.xml
index 57a5a4b..20e6113 100644
--- a/indra/newview/skins/default/xui/de/alerts.xml
+++ b/indra/newview/skins/default/xui/de/alerts.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <alerts>
 	<global name="skipnexttime">
 		Nicht mehr anzeigen
@@ -58,8 +58,7 @@
 			Verbindung mit [SECOND_LIFE] nicht möglich.
 Möglicherweise handelt es sich um einen Systemausfall.
 
-Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie
-für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
+Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
 		</message>
 		<option name="OK">
 			OK
@@ -141,9 +140,7 @@ Sie finden es in der Webpage Studio-Ausstellung.
 	</alert>
 	<alert name="GrantModifyRights">
 		<message name="message">
-			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.
+			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?
 		</message>
 		<option name="Yes">
@@ -155,9 +152,7 @@ Möchten Sie [FIRST_NAME] [LAST_NAME] Änderungsrechte gewähren?
 	</alert>
 	<alert name="GrantModifyRightsMultiple">
 		<message name="message">
-			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.
+			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?
 		</message>
 		<option name="Yes">
@@ -232,8 +227,7 @@ Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
 	<alert name="CreateGroupCanAfford">
 		<message name="message">
 			Das Erstellen einer Gruppe kostet [COST] L$.
-Damit die Gruppe länger als drei Tage bestehen bleibt,
-muss sie aus mindestens zwei Mitgliedern bestehen.
+Damit die Gruppe länger als drei Tage bestehen bleibt, muss sie aus mindestens zwei Mitgliedern bestehen.
  
 Gruppe gründen?
 		</message>
@@ -257,8 +251,7 @@ Sie haben nicht genug L$, um eine Gruppe zu erstellen.
 	</alert>
 	<alert name="GroupNameUsesReservedWord">
 		<message name="message">
-			Der Gruppenname enthält ein unerwünschtes Wort. Bitte
-wählen Sie einen anderen Namen.
+			Der Gruppenname enthält ein unerwünschtes Wort. Bitte wählen Sie einen anderen Namen.
 		</message>
 	</alert>
 	<alert name="MustSpecifyGroupNoticeSubject">
@@ -294,8 +287,7 @@ Möchten Sie fortfahren?
 	</alert>
 	<alert name="AssignDangerousActionWarning">
 		<message name="message">
-			Sie sind im Begriff, der Rolle &apos;[ROLE_NAME]&apos; die Fähigkeit 
-&apos;[ACTION_NAME]&apos; zuzuweisen.
+			Sie sind im Begriff, der Rolle &apos;[ROLE_NAME]&apos; die Fähigkeit &apos;[ACTION_NAME]&apos; zuzuweisen.
  
  *ACHTUNG*
  Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
@@ -315,8 +307,7 @@ Der Rolle &apos;[ROLE_NAME]&apos; diese Fähigkeit zuweisen?
 	</alert>
 	<alert name="AssignDangerousAbilityWarning">
 		<message name="message">
-			Sie sind im Begriff, der Rolle &apos;[ROLE_NAME]&apos; die Fähigkeit 
-&apos;[ACTION_NAME]&apos; zuzuweisen.
+			Sie sind im Begriff, der Rolle &apos;[ROLE_NAME]&apos; die Fähigkeit &apos;[ACTION_NAME]&apos; zuzuweisen.
  
  *ACHTUNG*
  Mitglieder in einer Rolle mit dieser Fähigkeit können sich selbst -
@@ -333,19 +324,12 @@ Der Rolle &apos;[ROLE_NAME]&apos; diese Fähigkeit zuweisen?
 		</option>
 	</alert>
 	<alert name="ClickPublishHelpGroup">
-		<message name="message">
-			Im Web veröffentlichen
-		</message>
 	</alert>
 	<alert name="ClickPublishHelpLand">
-		<message name="message">
-			In Suche veröffentlichen
-		</message>
 	</alert>
 	<alert name="ClickPublishHelpLandDisabled">
 		<message name="message">
-			Diese Parzelle kann nicht in der Suche angezeigt werden, da sie sich in
-einer Region befindet, die das verbietet.
+			Diese Parzelle kann nicht in der Suche angezeigt werden, da sie sich in einer Region befindet, die das verbietet.
 		</message>
 	</alert>
 	<alert name="ClickPublishHelpPostcard">
@@ -354,9 +338,6 @@ einer Region befindet, die das verbietet.
 		</message>
 	</alert>
 	<alert name="ClickPublishHelpAvatar">
-		<message name="message">
-			In Suche anzeigen
-		</message>
 	</alert>
 	<alert name="ClickPartnerHelpAvatar">
 		<message name="message">
@@ -373,22 +354,22 @@ Die Second Life Website für weitere Informationen über Partnerschaften öffnen
 	</alert>
 	<alert name="ClickWebProfileHelpAvatar">
 		<message name="message">
-			Wenn dieser Einwohner eine Webprofil-URL angegeben hat, können Sie:
-* Auf &apos;Laden&apos; klicken und die Seite im integrierten Browser anzuzeigen.
-* Auf Laden &gt; &apos;In externem Browser&apos; klicken, um die Seite extern anzeigen zu lassen.
-* Auf Laden &gt; &apos;Start URL&apos; klicken, um zum Webprofil des Benutzers zurückzukehren.
+			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 jede beliebige URL als Ihr Webprofil eingeben und mit OK übernehmen.
-Wenn andere Einwohner Ihr Profil betrachten, können sie diese URL besuchen.
+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.
 		</message>
 	</alert>
 	<alert name="ClickWebProfileNoWebHelpAvatar">
 		<message name="message">
 			Wenn dieser Einwohner einen Webprofil-URL angegeben hat, können Sie:
- * Auf &apos;Öffnen&apos; klicken und die Seite im externen Browser anzeigen.
+ * Auf Laden klicken und die Seite im Standard-Browser anzeigen.
  
-In Ihrem Profil können Sie jeden URL als Webprofil festlegen.
-Bei Anzeige ihres Profils kann jeder Einwohner diesen URL öffnen.
+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.
 		</message>
 	</alert>
 	<alert name="ReputationMinGreaterThanMax">
@@ -459,7 +440,7 @@ Fortfahren?
 	<alert name="JoinGroupCannotAfford">
 		<message name="message">
 			Der Beitritt zu dieser Gruppe kostet [COST] L$.
-Sie haben nicht genug Geld, um dieser Gruppe beizutreten.
+Sie haben nicht genug L$, um dieser Gruppe beizutreten.
 		</message>
 	</alert>
 	<alert name="LandBuyPass">
@@ -476,9 +457,7 @@ Sie haben nicht genug Geld, um dieser Gruppe beizutreten.
 	</alert>
 	<alert name="CannotStartAuctionAlreadyForSale">
 		<message name="message">
-			Eine Parzelle, die bereits zum Verkauf freigegeben
-ist, kann nicht auktioniert werden. Brechen Sie zuerst den Landverkauf ab,
-wenn Sie eine Auktion starten möchten.
+			Eine Parzelle, die bereits zum Verkauf freigegeben ist, kann nicht auktioniert werden. Brechen Sie zuerst den Landverkauf ab, wenn Sie eine Auktion starten möchten.
 		</message>
 	</alert>
 	<alert name="SalePriceRestriction">
@@ -515,12 +494,9 @@ Der Verkaufspreis beträgt [SALE_PRICE] L$ und wird automatisch für den Verkauf
 	</alert>
 	<alert name="ReturnObjectsDeededToGroup">
 		<message name="message">
-			Möchten Sie alle Ihre Objekte auf dieser Parzelle,
-die der Gruppe &apos;[NAME]&apos; gehören,
-zurück in das jeweilige Inventar ihrer vorherigen Eigentümer transferieren?
+			Möchten Sie alle Ihre Objekte auf dieser Parzelle, die der Gruppe &apos;[NAME]&apos; 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!
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
  
 Objekte: [N]
 		</message>
@@ -533,9 +509,7 @@ Objekte: [N]
 	</alert>
 	<alert name="ReturnObjectsOwnedByUser">
 		<message name="message">
-			Möchten Sie alle Objekte auf dieser Parzelle,
-die dem Einwohner &apos;[NAME]&apos; gehören,
-in das jeweilige Inventar ihrer Eigentümer transferieren?
+			Möchten Sie alle Objekte auf dieser Parzelle, die dem Einwohner &apos;[NAME]&apos; gehören, in das jeweilige Inventar ihrer Eigentümer transferieren?
  
 Objekte: [N]
 		</message>
@@ -548,9 +522,7 @@ Objekte: [N]
 	</alert>
 	<alert name="ReturnObjectsOwnedBySelf">
 		<message name="message">
-			Möchten Sie alle Objekte
-auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar
-transferieren?
+			Möchten Sie alle Objekte auf dieser Parzelle, die Ihnen gehören, zurück in Ihr Inventar transferieren?
  
 Objekte: [N]
 		</message>
@@ -563,13 +535,10 @@ Objekte: [N]
 	</alert>
 	<alert name="ReturnObjectsNotOwnedBySelf">
 		<message name="message">
-			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.
+			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!
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
  
 Objekte: [N]
 		</message>
@@ -582,13 +551,10 @@ Objekte: [N]
 	</alert>
 	<alert name="ReturnObjectsNotOwnedByUser">
 		<message name="message">
-			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.
+			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!
+*WARNUNG* Alle nicht transferierbaren Objekte, die der Gruppe übertragen wurden, werden dabei gelöscht!
  
 Objekte: [N]
 		</message>
@@ -623,9 +589,7 @@ Objekte: [N]
 	</alert>
 	<alert name="ReturnObjectsNotOwnedByGroup">
 		<message name="message">
-			Objekte auf dieser Parzelle, die von der
-Gruppe [NAME] nicht gemeinsam genutzt werden,
-an ihre Eigentümer zurückgeben?
+			Objekte auf dieser Parzelle, die von der Gruppe [NAME] nicht gemeinsam genutzt werden, an ihre Eigentümer zurückgeben?
  
 Objekte: [N]
 		</message>
@@ -645,8 +609,7 @@ Damit Waffen funktionieren, müssen Skripts erlaubt sein.
 	</alert>
 	<alert name="MustBeInParcel">
 		<message name="message">
-			Sie müssen auf einer Landparzelle stehen,
-um ihren Landepunkt festzulegen.
+			Sie müssen auf einer Landparzelle stehen, um ihren Landepunkt festzulegen.
 		</message>
 	</alert>
 	<alert name="PromptRecipientEmail">
@@ -711,14 +674,6 @@ Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
 			Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
 		</message>
 	</alert>
-	<alert name="MustHaveAccountToLogInNoLinks">
-		<message name="message">
-			Sie benötigen ein Konto, um sich in [SECOND_LIFE] anmelden zu können.
-		</message>
-		<option name="OK">
-			Schließen
-		</option>
-	</alert>
 	<alert name="MustHaveAccountToLogIn">
 		<message name="message">
 			Hoppla! Da fehlt noch etwas.
@@ -735,8 +690,7 @@ Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten
 	</alert>
 	<alert name="AddClassified">
 		<message name="message">
-			Anzeigen erscheinen für eine Woche unter &apos;Anzeigen&apos; im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf &apos;Veröffentlichen...&apos;, um sie zum Verzeichnis hinzuzufügen.
-Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf &apos;Veröffentlichen&apos; klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
+			Anzeigen erscheinen für eine Woche unter &apos;Anzeigen&apos; im Suchverzeichnis. Füllen Sie Ihre Anzeige aus und klicken Sie auf &apos;Veröffentlichen...&apos;, um sie zum Verzeichnis hinzuzufügen. Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf &apos;Veröffentlichen&apos; klicken. Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, erscheint Ihre Anzeige weiter oben in der Liste.
 		</message>
 		<option name="OK">
 			OK
@@ -787,9 +741,7 @@ Gebühren werden nicht rückerstattet.
 	</alert>
 	<alert name="DisplayChangeRestart">
 		<message name="message">
-			Einige Änderungen der Bildschirmeinstellungen erfordern einen
-sofortigen Neustart von [SECOND_LIFE], wodurch
-alle laufenden Arbeiten verloren gehen.
+			Einige Änderungen der Bildschirmeinstellungen erfordern einen sofortigen Neustart von [SECOND_LIFE], wodurch alle laufenden Arbeiten verloren gehen.
 
 Die Änderungen übernehmen und das Programm beenden?
 		</message>
@@ -1002,8 +954,7 @@ Möchten Sie diese Objekte löschen?
 	</alert>
 	<alert name="DisplaySettingsSafe">
 		<message name="message">
-			Es wurden sichere Anzeige-Einstellungen gewählt,
-da die Option -safe verwendet wurde.
+			Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
 		</message>
 	</alert>
 	<alert name="UnsupportedGLRequirements">
@@ -1017,9 +968,8 @@ Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http://
 		<message name="message">
 			Achtung: Ihr System erfüllt nicht die Mindestanforderungen von Second Life. Dies kann eine schlechte Darstellungsleistung in Second Life zur Folge haben. Für nicht unterstützte Systemkonfigurationen bieten wir keinen technischen Support. 
 
-MINDESTANF.
-Die Seite [_URL] für
-weitere Informationen öffnen?
+MINSPECS
+Die Seite [_URL] für weitere Informationen öffnen?
 		</message>
 		<ignore name="ignore">
 			Bei Entdeckung nicht unterstützter Hardware
@@ -1063,8 +1013,7 @@ weitere Informationen öffnen?
 		<message name="message">
 			Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte.  
 Dies ist häufig der Fall bei neuer Hardware, die wir noch nicht testen konnten. 
-Second Life funktioniert aller Voraussicht nach normal, möglicherweise 
-müssen Sie aber die Grafikeinstellungen anpassen.
+Second Life funktioniert aller Voraussicht nach normal, möglicherweise müssen Sie aber die Grafikeinstellungen anpassen.
 (Bearbeiten &gt; Einstellungen &gt; Grafik).
 		</message>
 		<ignore name="ignore">
@@ -1073,8 +1022,7 @@ müssen Sie aber die Grafikeinstellungen anpassen.
 	</alert>
 	<alert name="DisplaySettingsRecommended">
 		<message name="message">
-			Es wurden die für Ihre Systemkonfiguration empfohlenen
-Anzeige-Einstellungen gewählt.
+			Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
 		</message>
 		<option name="OK">
 			OK
@@ -1098,10 +1046,8 @@ Folgende Domäne konnte nicht aufgelöst werden: [HOST]
 	<alert name="CannotFindDomain">
 		<message name="message">
 			Der Server-Domänenname konnte nicht gefunden werden.
-Mögliche Ursachen sind der Verlust der Netzwerkverbindung
-oder ein Serverproblem.
-Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie
-für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
+Mögliche Ursachen sind der Verlust der Netzwerkverbindung oder ein Serverproblem.
+Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
 		</message>
 		<option name="OK">
 			OK
@@ -1132,9 +1078,7 @@ falls der Fehler wiederholt auftritt.
 Die Ursache hierfür ist oft eine falsch eingestellte Uhrzeit auf Ihrem Computer.
 
 Bitte vergewissern Sie sich, dass Datum und Uhrzeit korrekt eingestellt sind.
-Bitte melden Sie das Problem unter
-www.secondlife.com/support,
-sollte der Fehler wiederholt auftreten.
+Bitte melden Sie das Problem unter www.secondlife.com/support, sollte der Fehler wiederholt auftreten.
 		</message>
 	</alert>
 	<alert name="CannotConnectVerificationError">
@@ -1142,9 +1086,7 @@ sollte der Fehler wiederholt auftreten.
 			Verbindung mit [SECOND_LIFE] nicht möglich.
 Der Anmeldeserver konnte sich nicht per SSL verifizieren.
 
-Bitte melden Sie das Problem unter
-www.secondlife.com/support,
-sollte der Fehler wiederholt auftreten.
+Bitte melden Sie das Problem unter www.secondlife.com/support, sollte der Fehler wiederholt auftreten.
 		</message>
 	</alert>
 	<alert name="CannotConnectUnknownErrorWindows">
@@ -1152,9 +1094,7 @@ sollte der Fehler wiederholt auftreten.
 			Verbindung mit [SECOND_LIFE] nicht möglich.
 Trotz all unserer Bemühungen ist ein unerwarteter Fehler aufgetreten.
 
-Bitte melden Sie das Problem auf
-www.secondlife.com/support und fügen Sie dem Bericht die Datei SecondLife.log
-an, die Sie hier finden: C:\Dokumente und Einstellungen\(Name)\Anwendungsdaten\SecondLife\logs
+Bitte melden Sie das Problem auf www.secondlife.com/support und fügen Sie dem Bericht die Datei SecondLife.log an, die Sie hier finden: C:\Dokumente und Einstellungen\(Name)\Anwendungsdaten\SecondLife\logs
 Vielen Dank.
 		</message>
 	</alert>
@@ -1163,9 +1103,7 @@ Vielen Dank.
 			Verbindung mit [SECOND_LIFE] nicht möglich.
 Trotz all unserer Bemühungen ist ein unerwarteter Fehler aufgetreten.
 
-Bitte melden Sie das Problem auf
-www.secondlife.com/support  und fügen Sie dem Bericht die Datei SecondLife.log
-an, die Sie hier finden: ~/Library/Application Support/SecondLife/logs
+Bitte melden Sie das Problem auf www.secondlife.com/support  und fügen Sie dem Bericht die Datei SecondLife.log an, die Sie hier finden: ~/Library/Application Support/SecondLife/logs
 Vielen Dank.
 		</message>
 	</alert>
@@ -1174,16 +1112,14 @@ Vielen Dank.
 			Bei der Prüfung Ihres Authentifizierungs-
 Token ist ein Problem aufgetreten. Bitte melden Sie sich erneut an. 
 
-Wenden Sie sich an www.secondlife.com/support,
-sollte dieser Fehler wiederholt auftreten.
+Wenden Sie sich an www.secondlife.com/support, sollte dieser Fehler wiederholt auftreten.
 		</message>
 	</alert>
 	<alert name="CannotConnectNoMessage">
 		<message name="message">
 			Unbekanntes Verbindungsproblem.
 
-Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie
-für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
+Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
 		</message>
 		<option name="OK">
 			OK
@@ -1196,8 +1132,7 @@ für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe
 		<message name="message">
 			Verbindung nicht möglich.  Keine Anmeldebestätigung von Simulator.
  
-Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie
-für Unterstützung und einen Link zur Systemstatus-Webseite auf &apos;Hilfe&apos;.
+Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie für Unterstützung und einen Link zur Systemstatus-Webseite auf &apos;Hilfe&apos;.
 		</message>
 		<option name="OK">
 			OK
@@ -1215,8 +1150,7 @@ für Unterstützung und einen Link zur Systemstatus-Webseite auf &apos;Hilfe&apo
 		<message name="message">
 			Die Installation von [SECOND_LIFE] ist abgeschlossen.
 
-Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen,
-bevor Sie sich anmelden können.
+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?
 		</message>
 		<option name="NewAccount...">
@@ -1229,8 +1163,7 @@ Möchten Sie auf www.secondlife.com ein Konto erstellen?
 	<alert name="ClothingStillDownloading">
 		<message name="message">
 			Ihr Avatar wird noch heruntergeladen.
-Sie können [SECOND_LIFE] normal verwenden und andere
-Einwohner können Sie sehen.
+Sie können [SECOND_LIFE] normal verwenden und andere Einwohner können Sie sehen.
 		</message>
 	</alert>
 	<alert name="CannotResolveDomain">
@@ -1277,10 +1210,7 @@ Bitte wählen Sie einen männlichen oder weiblichen Avatar.
 	</alert>
 	<alert name="CannotCopyWarning">
 		<message name="message">
-			Sie sind nicht berechtigt, dieses
-Objekt zu kopieren und verlieren es
-aus Ihrem Inventar, wenn Sie es weggeben. Möchten
-Sie dieses Objekt anbieten?
+			Sie sind nicht berechtigt, dieses Objekt zu kopieren und verlieren es aus Ihrem Inventar, wenn Sie es weggeben. Möchten Sie dieses Objekt anbieten?
 		</message>
 		<option name="Yes">
 			Ja
@@ -1311,9 +1241,7 @@ Sie dieses Objekt anbieten?
 	</alert>
 	<alert name="CannotCopyCountItems">
 		<message name="message">
-			Sie sind nicht berechtigt, [COUNT] der ausgewählten
-Objekte zu kopieren. Diese Objekte werden aus
-Ihrem Inventar gelöscht.
+			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?
 		</message>
 		<option name="Yes">
@@ -1325,15 +1253,13 @@ Möchten Sie diese Objekte weggeben?
 	</alert>
 	<alert name="CannotGiveCategory">
 		<message name="message">
-			Sie sind nicht berechtigt, den ausgewählten
-Ordner zu kopieren.
+			Sie sind nicht berechtigt, den ausgewählten Ordner zu kopieren.
 		</message>
 	</alert>
 	<alert name="FreezeAvatar">
 		<message name="message">
 			Diesen Avatar einfrieren?
-Der Avatar wird außer Gefecht gesetzt und kann
-sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
 		</message>
 		<option name="Freeze">
 			Einfrieren
@@ -1348,8 +1274,7 @@ sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
 	<alert name="FreezeAvatarFullname">
 		<message name="message">
 			[AVATAR_NAME] einfrieren?
-Der Avatar wird außer Gefecht gesetzt und kann
-sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
+Der Avatar wird außer Gefecht gesetzt und kann sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
 		</message>
 		<option name="Freeze">
 			Einfrieren
@@ -1402,16 +1327,13 @@ sich nicht mehr bewegen, chatten oder mit der Welt interagieren.
 	<alert name="AcquireErrorObjectSpan">
 		<message name="message">
 			FEHLER: Die Objekte überspannen mehrere Regionen.
-Verschieben Sie alle betreffenden Objekte in dieselbe
-Region.
+Verschieben Sie alle betreffenden Objekte in dieselbe Region.
 		</message>
 	</alert>
 	<alert name="TakeLockedOrNotOwnedBy">
 		<message name="message">
 			Mindestens ein Objekt ist gesperrt oder gehört Ihnen nicht.
-Wenn Ihnen ein Objekt nicht gehört und Sie es nehmen, 
-werden die Rechte für den nächsten Eigentümer angewandt und Sie
-können es möglicherweise nicht bearbeiten oder kopieren.
+Wenn Ihnen ein Objekt nicht gehört und Sie es nehmen, werden die Rechte für den nächsten Eigentümer angewandt und Sie können es möglicherweise nicht bearbeiten oder kopieren.
 
 Möchten Sie diese Objekte nehmen?
 		</message>
@@ -1443,22 +1365,19 @@ Sie können maximal [MAX] Objekte verknüpfen.
 	</alert>
 	<alert name="CannotLinkIncompleteSet">
 		<message name="message">
-			Sie können nur vollständige Objektsätze verknüpfen und
-Sie müssen mehr als ein Objekt auswählen.
+			Sie können nur vollständige Objektsätze verknüpfen und Sie müssen mehr als ein Objekt auswählen.
 		</message>
 	</alert>
 	<alert name="CannotLinkModify">
 		<message name="message">
-			Verknüpfung nicht möglich, da Sie nicht alle Objekte bearbeiten
-dürfen.  
+			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.
 		</message>
 	</alert>
 	<alert name="CannotLinkDifferentOwners">
 		<message name="message">
-			Verknüpfung nicht möglich, da nicht alle Objekte denselben
-Eigentümer haben. 
+			Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben. 
 
 Stellen Sie sicher, dass alle ausgewählten Objekte Ihnen gehören.
 		</message>
@@ -1587,8 +1506,7 @@ Bitte versuchen Sie es erneut.
 	</alert>
 	<alert name="CannotCreateLandmarkNotOwner">
 		<message name="message">
-			Sie können hier keine Landmarke erstellen,
-da der Landeigentümer dies verboten hat.
+			Sie können hier keine Landmarke erstellen, da der Landeigentümer dies verboten hat.
 		</message>
 	</alert>
 	<alert name="CannotRecompileSelectObjectsNoScripts">
@@ -1601,8 +1519,7 @@ Objekt mit Skript wählen.
 		<message name="message">
 			&apos;Rekompilieren&apos; nicht möglich.
 
-Wählen Sie Objekte mit Skripts, die
-Sie bearbeiten dürfen.
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
 		</message>
 	</alert>
 	<alert name="CannotResetSelectObjectsNoScripts">
@@ -1616,8 +1533,7 @@ Wählen Sie Objekte mit Skripts.
 		<message name="message">
 			&apos;Zurücksetzen&apos; nicht möglich.
 
-Wählen Sie Objekte mit Skripts, die
-Sie bearbeiten dürfen.
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
 		</message>
 	</alert>
 	<alert name="CannotSetRunningSelectObjectsNoScripts">
@@ -1631,8 +1547,7 @@ Wählen Sie Objekte mit Skripts.
 		<message name="message">
 			&apos;Ausführen&apos; von Skripts nicht möglich.
 
-Wählen Sie Objekte mit Skripts, die
-Sie bearbeiten dürfen.
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
 		</message>
 	</alert>
 	<alert name="CannotSetRunningNotSelectObjectsNoScripts">
@@ -1646,8 +1561,7 @@ Wählen Sie Objekte mit Skripts.
 		<message name="message">
 			&apos;Deaktivieren&apos; von Skripts nicht möglich.
 
-Wählen Sie Objekte mit Skripts, die
-Sie bearbeiten dürfen.
+Wählen Sie Objekte mit Skripts, die Sie bearbeiten dürfen.
 		</message>
 	</alert>
 	<alert name="NoFrontmostFloater">
@@ -1713,15 +1627,12 @@ Keine Parzelle ausgewählt.
 	</alert>
 	<alert name="CannotSetLandOwnerMultipleRegions">
 		<message name="message">
-			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.
+			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.
 		</message>
 	</alert>
 	<alert name="ForceOwnerAuctionWarning">
 		<message name="message">
-			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?
+			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?
 		</message>
 		<option name="Force">
 			OK
@@ -1810,8 +1721,7 @@ Wählen Sie eine einzelne Parzelle.
 Streaming-Medien erfordern eine schnelle Internet-Verbindung.
  
 Streaming-Medien abspielen, wenn verfügbar?
-(Sie können diese Option später unter
-&apos;Einstellungen&apos; &gt; &apos;Audio &amp; Video&apos; ändern.)
+(Sie können diese Option später unter &apos;Einstellungen&apos; &gt; &apos;Audio &amp; Video&apos; ändern.)
 		</message>
 		<option name="PlayMedia">
 			Medien wiedergeben
@@ -1882,8 +1792,7 @@ Wählen Sie eine ganze Parzelle oder teilen Sie Ihre Parzelle.
 	<alert name="ReleaseLandWarning">
 		<message name="message">
 			Sie sind im Begriff, [AREA] qm Land aufzugeben.
-Wenn Sie diese Parzelle aufgeben, wird sie ohne
-L$-Erstattung von Ihrem Landbesitz entfernt.
+Wenn Sie diese Parzelle aufgeben, wird sie ohne L$-Erstattung von Ihrem Landbesitz entfernt.
 
 Dieses Land aufgeben?
 		</message>
@@ -1911,9 +1820,7 @@ Wählen Sie einen Parzellenabschnitt aus.
 	</alert>
 	<alert name="LandDivideWarning">
 		<message name="message">
-			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.
+			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?
 		</message>
@@ -1966,8 +1873,7 @@ Wählen Sie Land auf beiden Parzellen aus.
 		<message name="message">
 			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.
+Sie müssen der neuen Parzelle einen Namen geben und ihre Optionen festlegen.
  
 Land zusammenlegen?
 		</message>
@@ -2028,21 +1934,15 @@ Land zusammenlegen?
 	</alert>
 	<alert name="CannotSaveWearableOutOfSpace">
 		<message name="message">
-			&apos;[NAME]&apos; konnte nicht in Kleidungsdatei gespeichert werden.  Geben Sie Speicherplatz
-auf dem Computer frei und speichern Sie das
-Kleidungsstück erneut.
+			&apos;[NAME]&apos; konnte nicht in Kleidungsdatei gespeichert werden.  Geben Sie Speicherplatz auf dem Computer frei und speichern Sie das Kleidungsstück erneut.
 		</message>
 	</alert>
 	<alert name="CannotSaveToAssetStore">
 		<message name="message">
 			[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. 
+Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut. 
 
-Tritt dieses Problem wiederholt auf,
-klicken Sie auf das Pulldown-Menü &apos;Hilfe | Fehler melden&apos;
-und geben Sie Details zu Ihrem Netzwerk-Setup an.
+Tritt dieses Problem wiederholt auf, klicken Sie auf das Pulldown-Menü &apos;Hilfe | Fehler melden&apos; und geben Sie Details zu Ihrem Netzwerk-Setup an.
 		</message>
 	</alert>
 	<alert name="AppEarlyExit">
@@ -2051,8 +1951,7 @@ und geben Sie Details zu Ihrem Netzwerk-Setup an.
  
 Dieses Problem kann nicht behoben werden. 
 
-Deinstallieren und reinstallieren Sie das Programm. Sollte dieses
-Problem fortbestehen, finden Sie weitere Hilfe in der Tech-Support-FAQ auf:
+Deinstallieren und reinstallieren Sie das Programm. Sollte dieses Problem fortbestehen, finden Sie weitere Hilfe in der Tech-Support-FAQ auf:
 www.secondlife.com/support.
 		</message>
 		<option name="Quit">
@@ -2080,11 +1979,13 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
 	</alert>
 	<alert name="AddFriend" title="Freund hinzufügen">
 		<message name="message">
-			Freunde können sich gegenseitig die Berechtigung
-erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+			Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
 
 [NAME] Freundschaft anbieten?
 		</message>
+		<editline name="editline">
+			Wollen wir Freunde sein?
+		</editline>
 		<option name="Offer">
 			OK
 		</option>
@@ -2094,13 +1995,12 @@ erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen z
 	</alert>
 	<alert name="AddFriendWithMessage" title="Freund hinzufügen">
 		<message name="message">
-			Freunde können sich gegenseitig die Berechtigung
-erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
+			Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen.
 
 [NAME] Freundschaft anbieten?
 		</message>
 		<editline name="editline">
-			Möchtest du mein Freunde sein?
+			Wollen wir Freunde sein?
 		</editline>
 		<option name="Offer">
 			OK
@@ -2159,8 +2059,7 @@ auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
 	</alert>
 	<alert name="GodDeleteAllObjectsByUser">
 		<message name="message">
-			Möchten Sie ALLE Objekte (einschließlich geskriptete)
-von
+			Möchten Sie ALLE Objekte (einschließlich geskriptete) von
 ** [AVATAR_NAME] **
 auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
 		</message>
@@ -2172,9 +2071,6 @@ auf ALLEN LÄNDERN in diesem Sim LÖSCHEN?
 		</option>
 	</alert>
 	<alert name="PublishGroupInfoToWeb">
-		<message name="message">
-			Im Web veröffentlichen
-		</message>
 	</alert>
 	<alert name="BlankClassifiedName">
 		<message name="message">
@@ -2305,8 +2201,7 @@ Möchten Sie diese Objekte nehmen?
 	<alert name="ConfirmObjectTakeNoOwn">
 		<message name="message">
 			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.
+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?
 		</message>
@@ -2321,9 +2216,7 @@ Möchten Sie diese Objekte nehmen?
 		<message name="message">
 			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.
+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?
@@ -2344,11 +2237,8 @@ Wählen Sie ein kleineres Gebiet und versuchen Sie es erneut.
 	</alert>
 	<alert name="DeedLandToGroup">
 		<message name="message">
-			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.
+			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 &apos;[GROUP_NAME]&apos;
  [AREA] m2 Land schenken?
@@ -2362,13 +2252,9 @@ Der Gruppe &apos;[GROUP_NAME]&apos;
 	</alert>
 	<alert name="DeedLandToGroupWithContribution">
 		<message name="message">
-			Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe
-über ausreichende Landnutzungsrechte verfügt.
-Die Schenkung beinhaltet eine Landübertragung
-an die Gruppe von &apos;[FIRST_NAME] [LAST_NAME]&apos;.
-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.
+			Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
+Die Schenkung beinhaltet eine Landübertragung an die Gruppe von &apos;[FIRST_NAME] [LAST_NAME]&apos;.
+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 &apos;[GROUP_NAME]&apos;
  [AREA] m2 Land schenken?
@@ -2382,14 +2268,12 @@ Der Gruppe &apos;[GROUP_NAME]&apos;
 	</alert>
 	<alert name="DisplaySetToSafe">
 		<message name="message">
-			Es wurden sichere Anzeige-Einstellungen gewählt,
-da die Option -safe verwendet wurde.
+			Es wurden sichere Anzeige-Einstellungen gewählt, da die Option -safe verwendet wurde.
 		</message>
 	</alert>
 	<alert name="DisplaySetToRecommended">
 		<message name="message">
-			Es wurden die für Ihre Systemkonfiguration empfohlenen
-Anzeige-Einstellungen gewählt.
+			Es wurden die für Ihre Systemkonfiguration empfohlenen Anzeige-Einstellungen gewählt.
 		</message>
 	</alert>
 	<alert name="UnableToConnect">
@@ -2401,11 +2285,9 @@ Folgende Domäne konnte nicht aufgelöst werden: [HOST_NAME]
 	<alert name="CanNotFindServer">
 		<message name="message">
 			Der Server-Domänenname konnte nicht gefunden werden.
-Mögliche Ursachen sind der Verlust der Netzwerkverbindung
-oder ein Serverproblem.
+Mögliche Ursachen sind der Verlust der Netzwerkverbindung oder ein Serverproblem.
 
-Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie
-für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
+Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
 		</message>
 		<option name="OK">
 			OK
@@ -2425,8 +2307,7 @@ Verbindung mit [IP_ADDRESS] nicht möglich
 			Verbindung mit [SECOND_LIFE] nicht möglich.
 Möglicherweise handelt es sich um einen Systemausfall.
 
-Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie
-für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
+Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe&apos;.
 		</message>
 		<option name="OK">
 			OK
@@ -2445,8 +2326,7 @@ für Unterstützung und einen Link auf die Systemstatus-Webseite auf &apos;Hilfe
 			QuickTime wurde deaktiviert, weil Sie eine alte Version verwenden
 		</ignore>
 		<message name="message">
-			Streaming-Video wurde deaktiviert, weil die QuickTime-Version 
-auf Ihrem Computer nicht mehr aktuell ist. 
+			Streaming-Video wurde deaktiviert, weil die QuickTime-Version auf Ihrem Computer nicht mehr aktuell ist. 
 
 Laden Sie ein Update von http://www.apple.com/quicktime/ herunter.
 		</message>
@@ -2470,8 +2350,7 @@ Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt
 		<message name="message">
 			Die Installation von [SECOND_LIFE] ist abgeschlossen.
 
-Wenn Sie [SECOND_LIFE] das erste Mal verwenden, müssen Sie ein Konto anlegen,
-bevor Sie sich anmelden können.
+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?
 		</message>
 		<option name="NewAccount...">
@@ -2510,8 +2389,7 @@ Bitte überprüfen Sie Ihre Netzwerkverbindung.
 			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].
+Drücken Sie F1 für Hilfe oder für weitere Informationen über [SECOND_LIFE].
 		</message>
 	</alert>
 	<alert name="WelcomeChooseSex">
@@ -2519,8 +2397,7 @@ Informationen über [SECOND_LIFE].
 			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].
+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.
 		</message>
@@ -2533,7 +2410,7 @@ Sie können sich später noch umentscheiden.
 	</alert>
 	<alert name="NotEnoughCurrency">
 		<message name="message">
-			[NAME] L$ [PRICE] Sie haben nicht genügend Geld.
+			[NAME] [PRICE] L$  Sie haben nicht genügend L$, um diese Aktion auszuführen.
 		</message>
 	</alert>
 	<alert name="GrantedModifyRights">
@@ -2550,8 +2427,7 @@ Sie können sich später noch umentscheiden.
 		<message name="message">
 			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.)
+(Auf dem Produktionssystem warten Sie einfach 5 Minuten. Die Karten werden nach erneuter Anmeldung automatisch aktualisiert.)
 		</message>
 		<option name="OK">
 			OK
@@ -2599,8 +2475,7 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
 			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 &quot;Übernehmen&quot;.
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf &quot;Übernehmen&quot;.
 		</message>
 	</alert>
 	<alert name="InvalidTerrainSize">
@@ -2608,21 +2483,17 @@ klicken Sie dann erneut auf &quot;Übernehmen&quot;.
 			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 &quot;Übernehmen&quot;.
+Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 und 24 Bit und klicken Sie dann erneut auf &quot;Übernehmen&quot;.
 		</message>
 	</alert>
 	<alert name="RawUploadStarted">
 		<message name="message">
-			Hochladen gestartet. Je nach Verbindungsgeschwindigkeit 
-kann der Vorgang bis zu 2 Minuten dauern.
+			Hochladen gestartet. Je nach Verbindungsgeschwindigkeit kann der Vorgang bis zu 2 Minuten dauern.
 		</message>
 	</alert>
 	<alert name="ConfirmBakeTerrain">
 		<message name="message">
-			Möchten Sie das aktuelle Terrain formen, 
-es zum Mittelpunkt der oberen und unteren Terraingrenzen 
-und zum Standard des &apos;Zurücksetzen&apos;-Tools machen?
+			Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des &apos;Zurücksetzen&apos;-Tools machen?
 		</message>
 		<option name="Bake">
 			OK
@@ -2675,8 +2546,7 @@ und zum Standard des &apos;Zurücksetzen&apos;-Tools machen?
 	</alert>
 	<alert name="ClassifiedMustBeAlphanumeric">
 		<message name="message">
-			Der Name der Anzeige muss mit einem Buchstaben von 
-A bis Z oder einer Ziffer beginnen.  Satzzeichen sind nicht erlaubt.
+			Der Name der Anzeige muss mit einem Buchstaben von A bis Z oder einer Ziffer beginnen.  Satzzeichen sind nicht erlaubt.
 		</message>
 	</alert>
 	<alert name="CantSetBuyObject">
@@ -2960,9 +2830,7 @@ In Ihren Anwendungsordner herunterladen?
 	</alert>
 	<alert name="ReturnToOwner">
 		<message name="message">
-			Möchten Sie die ausgewählten Objekte
-an ihre Eigentümer zurückgeben? Transferierbare übertragene
-Objekte werden ihren früheren Eigentümern zurückgegeben.
+			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!
 		</message>
@@ -3029,8 +2897,7 @@ Diese Gruppe verlassen?
 	</alert>
 	<alert name="RemoveItemWarn">
 		<message name="message">
-			Diese Aktion ist zwar erlaubt, aber beim Löschen von
-Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
+			Diese Aktion ist zwar erlaubt, aber beim Löschen von Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
 		</message>
 		<option name="Yes">
 			OK
@@ -3074,10 +2941,7 @@ Inhalten wird das Objekt beschädigt. Möchten Sie dieses Element löschen?
 	<alert name="BusyModeSet">
 		<message name="message">
 			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.
+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.
 		</message>
 		<ignore name="ignore">
 			Beim Aktivieren des Beschäftigt-Modus
@@ -3096,8 +2960,7 @@ Papierkorb verschoben.
 	</alert>
 	<alert name="NotecardAttachPermFail">
 		<message name="message">
-			An Notizkarten lassen sich nur Objekte mit uneingeschränkten
-&apos;Nächster Eigentümer&apos;-Rechten anfügen.
+			An Notizkarten lassen sich nur Objekte mit uneingeschränkten &apos;Nächster Eigentümer&apos;-Rechten anfügen.
 		</message>
 		<option name="OK">
 			OK
@@ -3105,11 +2968,8 @@ Papierkorb verschoben.
 	</alert>
 	<alert name="JoinedTooManyGroupsMember">
 		<message name="message">
-			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
-&apos;Bearbeiten&apos; &gt; &apos;Gruppen...&apos;.
+			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 &apos;Bearbeiten&apos; &gt; &apos;Gruppen...&apos;.
 [NAME] hat Sie eingeladen, einer Gruppe beizutreten.
 [INVITE]
 		</message>
@@ -3122,11 +2982,8 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter
 	</alert>
 	<alert name="JoinedTooManyGroupsOfficer">
 		<message name="message">
-			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
-&apos;Bearbeiten&apos; &gt; &apos;Gruppen...&apos;.
+			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 &apos;Bearbeiten&apos; &gt; &apos;Gruppen...&apos;.
 [NAME] hat Sie eingeladen, einer Gruppe als Officer beizutreten.
 [INVITE]
 		</message>
@@ -3248,8 +3105,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter
 	</alert>
 	<alert name="MessageEstate" title="Nachricht an alle auf diesem Grundstück">
 		<message name="message">
-			Geben Sie eine kurze Nachricht ein, die
-an jede Person auf Ihrem Grundstück gesendet wird.
+			Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird.
 		</message>
 		<option name="OK">
 			OK
@@ -3260,12 +3116,9 @@ an jede Person auf Ihrem Grundstück gesendet wird.
 	</alert>
 	<alert name="ChangeLindenEstate" title="Linden-Grundstück ändern">
 		<message name="message">
-			Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, 
-Teen-Raster, Orientierung usw.) zu verändern. 
+			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.
+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?
 		</message>
@@ -3278,14 +3131,10 @@ Fortfahren?
 	</alert>
 	<alert name="ChangeLindenAccess" title="Zugang zu Linden-Grundstück ändern">
 		<message name="message">
-			Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz 
-(Mainland, Teen-Raster, Orientierung usw.) zu verändern. 
+			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.
+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.
 		</message>
 		<option name="ChangeEstate">
 			OK
@@ -3538,8 +3387,7 @@ Anzeige für [AMOUNT] L$ veröffentlichen?
 	</alert>
 	<alert name="MessageRegion" title="Nachricht an alle in dieser Region">
 		<message name="message">
-			Geben Sie eine kurze Nachricht ein, die
-an jede Person in dieser Region gesendet wird.
+			Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird.
 		</message>
 		<option name="OK">
 			OK
@@ -3550,90 +3398,74 @@ an jede Person in dieser Region gesendet wird.
 	</alert>
 	<alert name="HelpRegionBlockTerraform" title="Terraformen blockieren">
 		<message name="message">
-			Wenn diese Option aktiviert ist, können Landeigentümer Ihr Land nicht
-terraformen. Ausgenommen davon ist die parzelleneigene Einstellung &apos; Terrain bearbeiten&apos;.
+			Wenn diese Option aktiviert ist, können Landeigentümer Ihr Land nicht terraformen. Ausgenommen davon ist die parzelleneigene Einstellung &apos;Terrain bearbeiten&apos;.
 
-Standard: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionBlockFly" title="Fliegen blockieren">
 		<message name="message">
-			Wenn diese Option aktiviert ist, ist Fliegen in dieser Region nicht möglich,
-auch wenn für die Parzelle eine andere Einstellung aktiv ist.
+			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: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionAllowDamage" title="Schaden zulassen">
 		<message name="message">
-			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.
+			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: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionAgentLimit" title="Avatar-Limit">
 		<message name="message">
 			Legt die maximale Anzahl an Avataren für diese Region fest.
-Die Leistung hängt von der Anzahl der
-Avatare in der Region ab.
+Die Leistung hängt von der Anzahl der Avatare in der Region ab.
  
 Standard: 40
 		</message>
 	</alert>
 	<alert name="HelpRegionObjectBonus" title="Objektbonus">
 		<message name="message">
-			Der Objektbonus ist ein Multiplikator für die Anzahl an zulässigen Primitiven
-auf einer Parzelle. Gültig sind Werte zwischen 1 und 10. &apos;1&apos; erlaubt auf einer 512 qm
-großen Parzelle 117 Objekte. &apos;2&apos; 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. 
+			Der Objektbonus ist ein Multiplikator für die Anzahl an zulässigen Primitiven auf einer Parzelle. Gültig sind Werte zwischen 1 und 10. &apos;1&apos; erlaubt auf einer 512 qm großen Parzelle 117 Objekte. &apos;2&apos; 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
 		</message>
 	</alert>
 	<alert name="HelpRegionMaturity" title="Alterseinstufung">
 		<message name="message">
-			Legt die Alterseinstufung für diese Region fest, wie oben
-			im Bildschirm und in den Popup-Tipps auf der Karte gezeigt. Diese Einstellung
-hat auch Auswirkungen auf die Suchergebnisse – Einwohner können
-entscheiden, dass Ab-18-Regionen nicht angezeigt werden.
+			Legt die Alterseinstufung für diese Region fest, wie oben im Bildschirm und in den Popup-Tipps auf der Karte gezeigt. Diese Einstellung hat auch Auswirkungen auf die Suchergebnisse – Einwohner können entscheiden, dass Ab-18-Regionen nicht angezeigt werden.
  
-Es kann eine Weile dauern, bis sich diese Änderung auf 
-die Karte auswirkt.
+Es kann eine Weile dauern, bis sich diese Änderung auf die Karte auswirkt.
  
 Standard: Jugendfrei
 		</message>
 	</alert>
 	<alert name="HelpRegionRestrictPushObject" title="Stoßen beschränken">
 		<message name="message">
-			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.
+			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: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpParcelChanges" title="Parzelle zusammenlegen/teilen">
 		<message name="message">
-			Dieses Kontrollkästchen steuert, ob Parzellen des Grundstückseigentümers
-zusammengelegt bzw. unterteilt werden können. Wenn deaktiviert:
+			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
+ * 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
 		</message>
 	</alert>
 	<alert name="HelpRegionSearch" title="Nicht in Suche anzeigen">
 		<message name="message">
 			Wenn Sie diese Option auswählen, können Parzelleneigentümer ihre Parzellen nicht in der Suche anzeigen lassen
-Standard: aus
+
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpParcelSearch" title="Nicht in Suche anzeigen">
@@ -3646,8 +3478,7 @@ Standard: aus
 	<alert name="RegionMaturityChange" title="Alterseinstufung der Region ändern">
 		<message name="message">
 			Die Alterseinstufung dieser Region wurde aktualisiert. 
-Es kann eine Weile dauern, bis sich die Änderung auf 
-die Karte auswirkt.
+Es kann eine Weile dauern, bis sich die Änderung auf die Karte auswirkt.
 		</message>
 	</alert>
 	<alert name="HelpRegionLandResell" title="Landwiederverkauf">
@@ -3661,112 +3492,79 @@ Standard: deaktiviert
 	</alert>
 	<alert name="HelpEstateCovenantID" title="Vertrag-Asset-ID">
 		<message name="message">
-			Legt die Notizkarten-Asset-ID für den Grundstücksvertrag dieses Grundstücks
-fest. 
+			Legt die Notizkarten-Asset-ID für den Grundstücksvertrag dieses Grundstücks fest. 
  
 Standard: 00000000-0000-0000-0000-000000000000 oder leer
 		</message>
 	</alert>
 	<alert name="HelpRegionDisableScripts" title="Skripts deaktivieren">
 		<message name="message">
-			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 &apos;Simulator Physics FPS&apos; (Simulator Physik-FPS) an.
+			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 &apos;Simulator Physics FPS&apos; (Simulator Physik-FPS) an.
 Wenn der Wert unter 45 liegt, öffnen Sie den Bereich &apos;Time&apos; (Zeit) ganz unten in der Statistikleiste. Wenn der Wert für &quot;Script Time&quot; (Skriptzeit) 25 ms oder höher ist, klicken Sie auf &apos;Top-Skripts&apos;. Der Name und die Position der Skripts, die für die schlechte Performance verantwortlich sind, werden angezeigt.
- Wenn Sie das Kontrollkästchen &apos;Skripts deaktivieren&apos; aktivieren und auf &apos;Übernehmen&apos; klicken, werden alle Skripts in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten &apos;Top-Skripts&apos; 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 &apos;Skript deaktivieren&apos; und klicken Sie auf &apos;Übernehmen&apos;.
- Standard: aus
+Wenn Sie das Kontrollkästchen &apos;Skripts deaktivieren&apos; aktivieren und auf &apos;Übernehmen&apos; klicken, werden alle Skripts in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten &apos;Top-Skripts&apos; 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 &apos;Skript deaktivieren&apos; und klicken Sie auf &apos;Übernehmen&apos;.
+
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionDisableCollisions" title="Kollisionen deaktivieren">
 		<message name="message">
 			Schlechte Sim-Performance ist oftmals auf physische Objekte zurückzuführen. 
-Öffnen Sie die Statistikleiste (Strg-Umschalt-1). Sehen Sie sich den Wert &apos;Simulator 
-Physics FPS&apos; an. Liegt dieser unter 45, öffnen Sie unten in der 
-Statistikleiste den &apos;Time&apos;-Bereich. Liegt die &apos;Sim Time (Physics)&apos; 
-bei 20 ms oder darüber, klicken Sie auf &apos;Top-Kollisionsobjekte&apos;. 
-Der Name und der Standort der physischen Objekte, die das  
-Problem verursachen, werden angezeigt.
+Öffnen Sie die Statistikleiste (Strg-Umschalt-1). Sehen Sie sich den Wert &apos;Simulator Physics FPS&apos; an. Liegt dieser unter 45, öffnen Sie unten in der Statistikleiste den &apos;Time&apos;-Bereich. Liegt die &apos;Sim Time (Physics)&apos; bei 20 ms oder darüber, klicken Sie auf &apos;Top-Kollisionsobjekte&apos;. 
+Der Name und der Standort der physischen Objekte, die das Problem verursachen, werden angezeigt.
  
-Wenn Sie das Kontrollkästchen &apos;Kollisionen deaktivieren&apos; aktivieren und auf
-&apos;Übernehmen&apos; klicken, werden alle Objekt-Objekt-Kollisionen in der Region zeitweilig deaktiviert. Dieser Schritt 
-ist eventuell notwendig, damit Sie an die Position des gemeldeten 
-&apos;Top-Kollisionsobjekts&apos; 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 &apos;Kollisionen deaktivieren&apos; und klicken Sie auf &apos;Übernehmen&apos;, 
-um Kollisionen in dieser Region wieder zu aktivieren.
+Wenn Sie das Kontrollkästchen &apos;Kollisionen deaktivieren&apos; aktivieren und auf &apos;Übernehmen&apos; klicken, werden alle Objekt-Objekt-Kollisionen in der Region zeitweilig deaktiviert. Dieser Schritt ist eventuell notwendig, damit Sie an die Position des gemeldeten &apos;Top-Kollisionsobjekts&apos; 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 &apos;Kollisionen deaktivieren&apos; und klicken Sie auf &apos;Übernehmen&apos;, um Kollisionen in dieser Region wieder zu aktivieren.
  
-Standard: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionDisablePhysics" title="Physik deaktivieren">
 		<message name="message">
-			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. 
+			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.
+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. 
+Schalten Sie die Physiksimulation hinterher wieder ein. Andernfalls können sich Avatare nicht mehr bewegen. 
  
-Standard: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionTopColliders" title="Top-Kollisionsobjekte">
 		<message name="message">
-			Zeigt eine Liste der Objekte mit den potenziell meisten 
-Objekt-Objekt-Kollisionen an.  Diese Objekte können 
-die Leistung beeinträchtigen.  Wählen Sie &apos;Ansicht&apos; &gt; &apos;Statistikleiste&apos; aus und 
-sehen Sie unter &apos;Simulator&apos; &gt; &apos;Time&apos; &gt; &apos;Sim Time (Physics)&apos; nach, 
-ob die Physikberechnung länger als 20 ms dauert.
+			Zeigt eine Liste der Objekte mit den potenziell meisten Objekt-Objekt-Kollisionen an.  Diese Objekte können die Leistung beeinträchtigen.  Wählen Sie &apos;Ansicht&apos; &gt; &apos;Statistikleiste&apos; aus und sehen Sie unter &apos;Simulator&apos; &gt; &apos;Time&apos; &gt; &apos;Sim Time (Physics)&apos; nach, ob die Physikberechnung länger als 20 ms dauert.
 		</message>
 	</alert>
 	<alert name="HelpRegionTopScripts" title="Top-Skripts">
 		<message name="message">
-			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 &apos;Ansicht&apos; &gt; &apos;Statistikleiste&apos; und 
-sehen Sie unter &apos;Simulator&apos; &gt; &apos;Time&apos; &gt; &apos;Script Time&apos; nach, 
-ob mehr als 25 ms für Skripts benötigt werden.
+			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 &apos;Ansicht&apos; &gt; &apos;Statistikleiste&apos; und sehen Sie unter &apos;Simulator&apos; &gt; &apos;Time&apos; &gt; &apos;Script Time&apos; nach, ob mehr als 25 ms für Skripts benötigt werden.
 		</message>
 	</alert>
 	<alert name="HelpRegionRestart" title="Region neu starten">
 		<message name="message">
-			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. 
+			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.
+Der Neustart der Region behebt die meisten Leistungs-probleme, sollte aber nur nach Anweisung erfolgen.
 		</message>
 	</alert>
 	<alert name="HelpRegionWaterHeight" title="Wasserhöhe">
 		<message name="message">
-			Die Höhe der Wasserlinie in Metern. Liegt 
-dieser Wert unter 20 und haben Sie Wasser nahe am Rand der 
-Welt oder &apos;offenes&apos; Wasser definiert, wird eine 
-deutliche Lücke sichtbar. 
+			Die Höhe der Wasserlinie in Metern. Liegt dieser Wert unter 20 und haben Sie Wasser nahe am Rand der Welt oder &apos;offenes&apos; Wasser definiert, wird eine deutliche Lücke sichtbar. 
  
 Standard: 20
 		</message>
 	</alert>
 	<alert name="HelpRegionTerrainRaise" title="Obere Terraingrenze">
 		<message name="message">
-			Der maximale Betrag in Metern, um den Parzelleneigentümer 
-ihr Terrain über die Standardhöhe des &apos;geformten&apos; Terrains 
-erhöhen können. 
+			Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain über die Standardhöhe des &apos;geformten&apos; Terrains erhöhen können. 
  
 Standard: 4
 		</message>
 	</alert>
 	<alert name="HelpRegionTerrainLower" title="Untere Terraingrenze">
 		<message name="message">
-			Der maximale Betrag in Metern, um den Parzelleneigentümer 
-ihr Terrain unter die Standardhöhe des &apos;geformten&apos; Terrains 
-absenken können. 
+			Der maximale Betrag in Metern, um den Parzelleneigentümer ihr Terrain unter die Standardhöhe des &apos;geformten&apos; Terrains absenken können. 
  
 Standard: -4
 		</message>
@@ -3778,124 +3576,89 @@ Standard: -4
 	</alert>
 	<alert name="HelpRegionDownloadRaw" title="RAW-Terrain herunterladen">
 		<message name="message">
-			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. 
+			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.
 		</message>
 	</alert>
 	<alert name="HelpRegionUseEstateSun" title="Grundstücksonne verwenden">
 		<message name="message">
-			Aktivieren Sie diese Option, um in dieser Region denselben 
-Sonnenstand wie auf dem restlichen Grundstück einzustellen. 
+			Aktivieren Sie diese Option, um in dieser Region denselben Sonnenstand wie auf dem restlichen Grundstück einzustellen. 
  
-Standard: ein
+Standard: aktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionFixedSun" title="Sonne fest">
 		<message name="message">
-			Aktivieren Sie diese Option, um den Sonnenstand auf 
-die im Regler definierte Position festzulegen und die Animation auszuschalten. 
+			Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten. 
  
-Standard: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpRegionBakeTerrain" title="Terrain formen">
 		<message name="message">
-			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 &apos;Terrain bearbeiten&apos; &gt; &apos;Zurücksetzen&apos;
-in den ursprünglichen Zustand zurückversetzen. Das geformte Terrain ist auch das Zentrum 
-für die oberen und unteren Terraingrenzen.
+			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 &apos;Terrain bearbeiten&apos; &gt; &apos;Zurücksetzen&apos; in den ursprünglichen Zustand zurückversetzen. Das geformte Terrain ist auch das Zentrum für die oberen und unteren Terraingrenzen.
 		</message>
 	</alert>
 	<alert name="HelpEstateEstateManager" title="Grundstücksverwalter">
 		<message name="message">
-			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.  
+			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.
+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.
 		</message>
 	</alert>
 	<alert name="HelpEstateUseGlobalTime" title="Globale Zeit verwenden">
 		<message name="message">
-			Aktivieren Sie diese Option, um auf Ihrem Grundstück 
-denselben Sonnenstand wie auf dem Linden-&apos;Mainland&apos; 
-einzustellen. 
+			Aktivieren Sie diese Option, um auf Ihrem Grundstück denselben Sonnenstand wie auf dem Linden-&apos;Mainland&apos; einzustellen. 
  
-Standard: ein
+Standard: aktiviert
 		</message>
 	</alert>
 	<alert name="HelpEstateFixedSun" title="Sonne fest">
 		<message name="message">
-			Aktivieren Sie diese Option, um den Sonnenstand auf 
-die im Regler definierte Position festzulegen und die Animation auszuschalten.
+			Aktivieren Sie diese Option, um den Sonnenstand auf die im Regler definierte Position festzulegen und die Animation auszuschalten.
 		</message>
 	</alert>
 	<alert name="HelpEstateExternallyVisible" title="Öffentlich">
 		<message name="message">
-			Aktivieren Sie diese Option, um Einwohnern den Zugang zu diesem Grundstück zu
-erlauben, ohne auf der Zugangsliste zu stehen.
+			Aktivieren Sie diese Option, um Einwohnern den Zugang zu diesem Grundstück zu erlauben, ohne auf der Zugangsliste zu stehen.
  
-Standard: ein
+Standard: aktiviert
 		</message>
 	</alert>
 	<alert name="HelpEstateAllowDirectTeleport" title="Direktteleport zulassen">
 		<message name="message">
-			Wenn aktiviert, können sich Einwohner an jede Stelle auf 
-Ihrem Grundstück teleportieren.  Wenn deaktiviert, werden Einwohner 
-zum nächstgelegenen Telehub teleportiert. 
+			Wenn aktiviert, können sich Einwohner an jede Stelle auf Ihrem Grundstück teleportieren.  Wenn deaktiviert, werden Einwohner zum nächstgelegenen Telehub teleportiert. 
  
-Standard: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="HelpEstateAllowResident" title="Zugang erlauben">
 		<message name="message">
-			Der Zugang zu diesem Grundstück wird auf die hier 
-aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist 
-nur verfügbar, wenn &apos;Öffentlich&apos; 
-deaktiviert ist.
+			Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist nur verfügbar, wenn &apos;Öffentlich&apos; deaktiviert ist.
 		</message>
 	</alert>
 	<alert name="HelpEstateAllowGroup" title="Gruppenzugang erlauben">
 		<message name="message">
-			Der Zugang zu diesem Grundstück wird auf die hier 
-aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist 
-nur verfügbar, wenn &apos;Öffentlich&apos; 
-deaktiviert ist.
+			Der Zugang zu diesem Grundstück wird auf die hier aufgeführten Einwohner und Gruppen beschränkt.  Diese Einstellung ist nur verfügbar, wenn &apos;Öffentlich&apos; deaktiviert ist.
 		</message>
 	</alert>
 	<alert name="HelpEstateAbuseEmailAddress" title="E-Mail-Adresse für Missbrauchsmeldungen">
 		<message name="message">
-			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.
+			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.
 		</message>
 	</alert>
 	<alert name="HelpEstateBanResident" title="Zugang verweigern">
 		<message name="message">
-			Einwohnern auf dieser Liste wird der Zugang zum Grundstück verwehrt, 
-unabhängig von etwaigen anderen Einstellungen.
+			Einwohnern auf dieser Liste wird der Zugang zum Grundstück verwehrt, unabhängig von etwaigen anderen Einstellungen.
 		</message>
 	</alert>
 	<alert name="HelpEstateVoiceChat" title="Voice-Chat erlauben">
 		<message name="message">
-			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.
+			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: aus
+Standard: deaktiviert
 		</message>
 	</alert>
 	<alert name="VoiceVersionMismatch" title="Falsche Voice-Version">
@@ -4062,9 +3825,7 @@ Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK.
 	<alert name="SetPickLocation">
 		<message name="message">
 			Hinweis:
-Sie haben die Position dieser
-Auswahl aktualisiert, aber die anderen
-Daten behalten ihre ursprünglichen Werte.
+Sie haben die Position dieser Auswahl aktualisiert, aber die anderen Daten behalten ihre ursprünglichen Werte.
 		</message>
 		<option name="OK">
 			OK
@@ -4089,10 +3850,8 @@ Inventarobjekt(e) verschieben?
 	</alert>
 	<alert name="MoveInventoryFromScriptedObject">
 		<message name="message">
-			Sie haben &apos;nicht kopierfähige&apos; 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. 
+			Sie haben &apos;nicht kopierfähige&apos; 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?
 		</message>
@@ -4108,8 +3867,7 @@ Inventarobjekt(e) verschieben?
 	</alert>
 	<alert name="ClickActionNotPayable">
 		<message name="message">
-			Achtung: Die Klick-Aktion &apos;Objekt bezahlen&apos; wurde definiert, sie 
-funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefügt wird.
+			Achtung: Die Klick-Aktion &apos;Objekt bezahlen&apos; wurde definiert, sie funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefügt wird.
 		</message>
 		<ignore name="ignore">
 			Beim Einrichten von Events mit &apos;Objektbezahlung&apos; ohne Geld
@@ -4178,17 +3936,14 @@ funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefügt w
 	</alert>
 	<alert name="HelpReportAbuseEmailLL">
 		<message name="message">
-			Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen 
-und Community-Standards zu melden. Siehe:
+			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 
-Police Blotter verfolgen:
+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/community/blotter.php
+http://secondlife.com/support/incidentreport.php
 		</message>
 	</alert>
 	<alert name="HelpReportAbuseEmailEO">
@@ -4202,10 +3957,7 @@ Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der
 	</alert>
 	<alert name="HelpReportBug">
 		<message name="message">
-			Verwenden Sie dieses Tool *nur*, um technische Features zu melden,
-die nicht wie beschrieben oder erwartet funktionieren. Bitte machen
-Sie so viele Angaben wie möglich. Sie können auf die automatische
-Antwort-E-Mail antworten, um Ihre Meldung noch zu ergänzen.
+			Verwenden Sie dieses Tool *nur*, um technische Features zu melden, die nicht wie beschrieben oder erwartet funktionieren. Bitte machen Sie so viele Angaben wie möglich. Sie können auf die automatische Antwort-E-Mail antworten, um Ihre Meldung noch zu ergänzen.
 Alle gemeldeten Fehler werden geprüft und bewertet. Sie erhalten keine persönliche Antwort auf Ihre E-Mail.
 -
 Bei technischen Problemen wenden Sie sich bitte an den Support unter: 
@@ -4253,33 +4005,29 @@ Eine genaue Zusammenfassung hilft uns, Fehler schneller zu beseitigen.
 	<alert name="HelpReportAbuseDetailsEmpty">
 		<message name="message">
 			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.
+Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden.
 		</message>
 	</alert>
 	<alert name="HelpReportBugDetailsEmpty">
 		<message name="message">
 			Bitte geben Sie eine ausführliche Fehlerbeschreibung ein.
-Eine möglichst genaue Beschreibung mit Schritten zur Reproduktion des Fehlers
-hilft uns,
-Fehler schneller zu beseitigen.
+Eine möglichst genaue Beschreibung mit Schritten zur Reproduktion des Fehlers hilft uns, Fehler schneller zu beseitigen.
 		</message>
 	</alert>
 	<alert name="HelpReportAbuseContainsCopyright">
 		<message name="message">
 			Sehr geehrte(r) Einwohner(in),
+ 
+Sie melden eine Urheberrechtsverletzung. Sind Sie wirklich sicher, dass Sie eine Verletzung des Urheberrechts melden möchten?
 
-achten Sie bei der Meldung einer Urheberrechtsverletzung darauf, dass Sie dabei korrekt vorgehen:
-
-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 verwandte 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.
+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. Die DMCA oder Inhaltsentfernungs-Vorgehensweise. 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.
+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 jetzt mit der Missbrauchmeldung fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein.
+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
 		</message>
 	</alert>
@@ -4306,12 +4054,9 @@ Möchten Sie es mit dem ausgewählten Objekt ersetzen?
 	</alert>
 	<alert name="BusyModePay" title="Beschäftigt-Modus-Warnung">
 		<message name="message">
-			Sie sind im Beschäftigt-Modus, sodass
-Sie im Austausch für diese Zahlung keine
-Objekte erhalten können.
+			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?
+Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
 		</message>
 		<ignore name="ignore">
 			Beim Bezahlen einer Person oder eines Objekts im Beschäftigt-Modus
@@ -4325,8 +4070,7 @@ bevor Sie diese Transaktion abschließen?
 	</alert>
 	<alert name="ConfirmEmptyTrash">
 		<message name="message">
-			Möchten Sie den Inhalt Ihres Papierkorbs
-wirklich löschen?
+			Möchten Sie den Inhalt Ihres Papierkorbs wirklich löschen?
 		</message>
 		<ignore name="ignore">
 			Beim Leeren des Inventar-Papierkorbs
@@ -4373,8 +4117,7 @@ wirklich löschen?
 	</alert>
 	<alert name="ConfirmEmptyLostAndFound">
 		<message name="message">
-			Möchten Sie den Inhalt Ihres Fundstücke-Ordners
-wirklich permanent löschen?
+			Möchten Sie den Inhalt Ihres Fundstücke-Ordners wirklich permanent löschen?
 		</message>
 		<ignore name="ignore">
 			Beim Leeren von Inventar und Fundstückeordner-
@@ -4391,8 +4134,7 @@ wirklich permanent löschen?
 			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.
+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.
 		</message>
 		<ignore name="ignore">
 			Beim Kopieren einer SLURL in die Zwischenablage
@@ -4515,11 +4257,7 @@ Ihre Tageszyklus-Einstellungen lassen sich mit den Schaltflächen &quot;Testtag
 	</alert>
 	<alert name="HelpHazeHorizon">
 		<message name="message">
-			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.
+			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.
 		</message>
 	</alert>
 	<alert name="HelpBlueDensity">
@@ -4529,32 +4267,22 @@ starker Dunst.
 	</alert>
 	<alert name="HelpHazeDensity">
 		<message name="message">
-			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.
+			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.
 		</message>
 	</alert>
 	<alert name="HelpDensityMult">
 		<message name="message">
-			Der Dichtemultiplikator beeinflusst die Gesamtdichte der Atmosphäre. Niedrige Einstellungen erzeugen die Anmutung &quot;dünner, sauberer Luft&quot;, hohe Einstellungen erzeugen den Eindruck schweren Smogs.
+			Der Dichtemultiplikator beeinflusst die Gesamtdichte der Atmosphäre. Niedrige Einstellungen erzeugen den Eindruck dünner, sauberer Luft, hohe Einstellungen erzeugen den Eindruck schweren Smogs.
 		</message>
 	</alert>
 	<alert name="HelpDistanceMult">
 		<message name="message">
-			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.
+			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.
 		</message>
 	</alert>
 	<alert name="HelpMaxAltitude">
 		<message name="message">
-			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 &quot;Intensität&quot; des Sonnenuntergangs beeinflussen.
+			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 &quot;Intensität&quot; des Sonnenuntergangs beeinflussen.
 		</message>
 	</alert>
 	<alert name="HelpSunlightColor">
@@ -4570,8 +4298,7 @@ die &quot;Intensität&quot; des Sonnenuntergangs beeinflussen.
 	<alert name="HelpSunGlow">
 		<message name="message">
 			Der Regler &quot;Größe&quot; steuert die Größe der Sonne.
-Der Regler &quot;Fokus&quot; steuert, wie unscharf die Sonne 
-am Himmel erscheint.
+Der Regler &quot;Fokus&quot; steuert, wie unscharf die Sonne am Himmel erscheint.
 		</message>
 	</alert>
 	<alert name="HelpSceneGamma">
@@ -4598,24 +4325,17 @@ Entspricht dem Azimut.
 	</alert>
 	<alert name="HelpCloudColor">
 		<message name="message">
-			Steuert die Wolkenfarbe.  Generell empfiehlt
-sich hier ein Weißton, aber hey,
-warum nicht ein bisschen Spaß haben?
+			Steuert die Wolkenfarbe. Generell empfiehlt sich hier ein Weißton, aber hey, warum nicht ein bisschen Spaß haben?
 		</message>
 	</alert>
 	<alert name="HelpCloudDetail">
 		<message name="message">
-			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.
+			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.
 		</message>
 	</alert>
 	<alert name="HelpCloudDensity">
 		<message name="message">
-			Mit den X- und Y-Reglern steuern Sie die
-Position der Wolken, mit dem Regler D die
-Wolkendichte.
+			Mit den X- und Y-Reglern steuern Sie die Position der Wolken, mit dem Regler D die Wolkendichte.
 		</message>
 	</alert>
 	<alert name="HelpCloudCoverage">
@@ -4780,8 +4500,7 @@ Wolkendichte.
 	</alert>
 	<alert name="Cannot_Purchase_an_Attachment">
 		<message name="message">
-			Objekte können nicht gekauft werden,
-solange sie Teil eines Anhangs sind.
+			Objekte können nicht gekauft werden, solange sie Teil eines Anhangs sind.
 		</message>
 	</alert>
 	<alert name="DebitPermissionDetails" title="Info zur Abfrage der Abbucherlaubnis">
@@ -4812,8 +4531,7 @@ solange sie Teil eines Anhangs sind.
  [SLURL]
 Die meisten Links ähneln dem Folgenden:
 
-secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-
-fd37083abc4c/about
+secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
 
 Überprüfen Sie die Schreibweise und versuchen Sie es erneut.
 		</message>
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 b75eeba..a29ad04 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -1,287 +1,258 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?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 type="string" length="1" name="Name:">
+			<text name="Name:">
 				Name:
 			</text>
-			<text type="string" length="1" name="Description:">
+			<text name="Description:">
 				Beschreibung:
 			</text>
-			<text type="string" length="1" name="Owner:">
+			<text name="Owner:">
 				Eigentümer:
 			</text>
-			<text type="string" length="1" name="OwnerText">
+			<text name="OwnerText">
 				Leyla Linden
 			</text>
-			<button label="Profil..." label_selected="Profil..." name="Profile..." />
-			<text type="string" length="1" name="Group:">
+			<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 type="string" length="1" name="For Sale:">
+			<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 type="string" length="1" name="Not for sale.">
+			<text name="Not for sale.">
 				Nicht zu verkaufen.
 			</text>
-			<text type="string" length="1" name="For Sale: Price L$[PRICE].">
+			<text name="For Sale: Price L$[PRICE].">
 				Preis: [PRICE] L$.
 			</text>
-			<button label="Land verkaufen..." label_selected="Land verkaufen..."
-			     name="Sell Land..." />
-			<text type="string" length="1" name="For sale to">
+			<button label="Land verkaufen..." label_selected="Land verkaufen..." name="Sell Land..." bottom="-200"/>
+			<text name="For sale to">
 				Zum Verkauf an: [BUYER]
 			</text>
-			<text type="string" length="1" name="Sell with landowners objects in parcel.">
+			<text name="Sell with landowners objects in parcel." width="210">
 				Objekte sind im Verkauf eingeschlossen.
 			</text>
-			<text type="string" length="1" name="Selling with no objects in parcel.">
+			<text name="Selling with no objects in parcel." width="237">
 				Objekte sind im Verkauf nicht eingeschlossen.
 			</text>
-			<button label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen"
-			     name="Cancel Land Sale" />
-			<text type="string" length="1" name="Claimed:">
+			<button label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale" bottom="-204"/>
+			<text name="Claimed:">
 				Gekauft am:
 			</text>
-			<text type="string" length="1" name="DateClaimText">
+			<text name="DateClaimText">
 				Dienstag, 15. Aug. 2006, 13:47:25
 			</text>
-			<text type="string" length="1" name="PriceLabel">
+			<text name="PriceLabel">
 				Gebiet:
 			</text>
-			<text type="string" length="1" name="PriceText">
+			<text name="PriceText">
 				4048 qm
 			</text>
-			<text type="string" length="1" name="Traffic:">
+			<text name="Traffic:">
 				Traffic:
 			</text>
-			<text type="string" length="1" name="DwellText">
+			<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." />
-			<text name="new users only">
+			<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."/>
+			<string name="new users only">
 				Nur neue Benutzer
-			</text>
-			<text name="anyone">
+			</string>
+			<string name="anyone">
 				Jeder
-			</text>
-			<text name="area_text">
+			</string>
+			<string name="area_text">
 				Gebiet:
-			</text>
-			<text name="area_size_text">
+			</string>
+			<string name="area_size_text">
 				[AREA] qm
-			</text>
-			<text name="auction_id_text">
+			</string>
+			<string name="auction_id_text">
 				Auktions-ID: [ID]
-			</text>
-			<text name="need_tier_to_modify">
+			</string>
+			<string name="need_tier_to_modify">
 				Bestätigen Sie den Kauf, um dieses Land zu bearbeiten.
-			</text>
-			<text name="group_owned_text">
+			</string>
+			<string name="group_owned_text">
 				(In Gruppenbesitz)
-			</text>
-			<text name="profile_text">
+			</string>
+			<string name="profile_text">
 				Profil...
-			</text>
-			<text name="info_text">
+			</string>
+			<string name="info_text">
 				Info...
-			</text>
-			<text name="public_text">
+			</string>
+			<string name="public_text">
 				(öffentlich)
-			</text>
-			<text name="none_text">
-				(-)
-			</text>
-			<text name="sale_pending_text">
+			</string>
+			<string name="none_text">
+				(keiner)
+			</string>
+			<string name="sale_pending_text">
 				(Wird verkauft)
-			</text>
+			</string>
 			<string name="no_selection_text">
 				Keine Parzelle ausgewählt.
 Öffnen Sie &quot;Welt&quot; &gt; &quot;Land-Info&quot; oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
 			</string>
 		</panel>
 		<panel label="Vertrag" name="land_covenant_panel">
-			<text type="string" length="1" name="covenant_timestamp_text">
+			<text name="covenant_timestamp_text">
 				Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00
 			</text>
-			<text type="string" length="1" name="region_name_lbl">
+			<text name="region_name_lbl">
 				Region:
 			</text>
-			<text type="string" length="1" name="region_name_text">
+			<text name="region_name_text">
 				leyla
 			</text>
-			<text type="string" length="1" name="estate_name_lbl">
+			<text name="estate_name_lbl">
 				Grundstück:
 			</text>
-			<text type="string" length="1" name="estate_name_text">
+			<text name="estate_name_text">
 				Mainland
 			</text>
-			<text type="string" length="1" name="estate_owner_lbl">
+			<text name="estate_owner_lbl">
 				Eigentümer:
 			</text>
-			<text type="string" length="1" name="estate_owner_text">
+			<text name="estate_owner_text">
 				(keiner)
 			</text>
-			<text type="string" length="1" name="resellable_clause">
+			<text name="resellable_clause">
 				Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
 			</text>
-			<text type="string" length="1" name="changeable_clause">
+			<text name="changeable_clause">
 				Gekauftes Land in dieser Region kann nicht zusammengelegt/geteilt werden.
 			</text>
-			<text_editor type="string" length="1" name="covenant_editor">
+			<text_editor name="covenant_editor">
 				Für dieses Grundstück fehlt der Vertrag.
 			</text_editor>
-			<text name="can_resell">
+			<string name="can_resell">
 				Gekauftes Land in dieser Region kann wiederverkauft werden.
-			</text>
-			<text name="can_not_resell">
+			</string>
+			<string name="can_not_resell">
 				Gekauftes Land in dieser Region kann nicht wiederverkauft werden.
-			</text>
-			<text name="can_change">
+			</string>
+			<string name="can_change">
 				Gekauftes Land in dieser Region kann zusammengelegt und geteilt werden.
-			</text>
-			<text name="can_not_change">
+			</string>
+			<string name="can_not_change">
 				Gekauftes Land in dieser Region kann nicht zusammengelegt und geteilt werden.
-			</text>
+			</string>
 		</panel>
 		<panel label="Objekte" name="land_objects_panel">
 			<text name="parcel_object_bonus">
 				Objektbonusfaktor in Region: [BONUS]
 			</text>
-			<text type="string" length="1" name="Simulator primitive usage:">
+			<text name="Simulator primitive usage:">
 				Primitive in Simulator:
 			</text>
 			<text name="objects_available">
 				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
 			</text>
-			<text name="objects_available_text">
+			<string name="objects_available_text">
 				[COUNT] von [MAX] ([AVAILABLE] verfügbar)
-			</text>
-			<text name="objects_deleted_text">
+			</string>
+			<string name="objects_deleted_text">
 				[COUNT] von [MAX] ([DELETED] werden gelöscht)
-			</text>
+			</string>
 			<text name="Primitives parcel supports:" width="200">
 				Von Parzelle unterstützte Primitiva:
 			</text>
-			<text left="204" name="object_contrib_text" width="152">
+			<text name="object_contrib_text"  left="204" width="152">
 				[COUNT]
 			</text>
-			<text type="string" length="1" name="Primitives on parcel:">
+			<text name="Primitives on parcel:">
 				Primitiva auf Parzelle:
 			</text>
-			<text left="204" name="total_objects_text" width="48">
+			<text name="total_objects_text" left="204" width="48">
 				[COUNT]
 			</text>
-			<text left="14" name="Owned by parcel owner:" width="200">
+			<text name="Owned by parcel owner:" left="14" width="200">
 				Im Eigentum des Parzellenbesitzers:
 			</text>
-			<text left="204" name="owner_objects_text" width="48">
+			<text name="owner_objects_text" left="204" 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:" width="200">
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOwner..." tool_tip="Objekte an ihre Eigentümer zurückgeben." right="-10" width="119"/>
+			<text name="Set to group:" left="14" width="200">
 				Der Gruppe übereignen:
 			</text>
-			<text left="204" name="group_objects_text" width="48">
+			<text name="group_objects_text" left="204" 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">
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowGroup" width="60" right="-135" />
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnGroup..." tool_tip="Objekte an ihre Eigentümer zurückgeben." right="-10" width="119"/>
+			<text name="Owned by others:" left="14" width="128">
 				Im Eigentum anderer:
 			</text>
-			<text left="204" name="other_objects_text" width="48">
+			<text name="other_objects_text" left="204" 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">
+			<button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/>
+			<button label="Zurückgeben..." label_selected="Zurückgeben..." name="ReturnOther..." tool_tip="Objekte an ihre Eigentümer zurückgeben." right="-10" width="119"/>
+			<text name="Selected / sat upon:" left="14" width="140">
 				Ausgewählt/gesessen auf:
 			</text>
-			<text left="204" name="selected_objects_text" width="48">
+			<text name="selected_objects_text" left="204" width="48">
 				[COUNT]
 			</text>
-			<text left="4" name="Autoreturn" width="380">
+			<text name="Autoreturn" width="380" left="4" >
 				Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus):
 			</text>
 			<line_editor name="clean other time" right="-10" width="56" />
-			<text type="string" length="1" name="Object Owners:">
+			<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..." />
-			<button label="" label_selected="" name="Type" tool_tip="Nach Typ sortieren" />
-			<button label="Name" label_selected="Name" name="Name" tool_tip="Nach Name sortieren" />
-			<button label="Zählen" label_selected="Zählen" name="Count"
-			     tool_tip="Nach Anzahl sortieren" />
-			<name_list label="Zählen" name="owner list">
-				<column label="Typ" name="type" />
-				<column label="Name" name="name" />
-				<column label="Zählen" name="count" />
+			<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"/>
 			</name_list>
-			/&gt;
 		</panel>
 		<panel label="Optionen" name="land_options_panel">
-			<text type="string" length="1" name="allow_label">
+			<text name="allow_label">
 				Anderen Einwohnern gestatten:
 			</text>
-			<check_box label="Terrain bearbeiten" name="edit land check" />
-			<check_box label="Landmarken erstellen" name="check landmark" />
-			<check_box label="Fliegen" name="check fly" />
-			<text type="string" length="1" name="allow_label2">
+			<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 type="string" length="1" name="allow_label3">
+			<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 type="string" length="1" name="allow_label4">
+			<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 type="string" length="1" name="land_options_label">
+			<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" />
-			<check_box label="Stoßen beschränken" name="PushRestrictCheck"
-			     tool_tip="llPushObject funktioniert nur in Skripts des Parzelleneigentümers oder in Skripts, die dem Stoßenden gehören." />
-			<check_box label="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck"
-			     tool_tip="Diese Parzelle in Suchergebnissen anzeigen." />
-			<combo_box left="266" max_chars="20" mouse_opaque="true" name="land category" width="130">
+			<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" left="266" width="130">
 				<combo_item name="AnyCategory">
 					Alle Kategorien
 				</combo_item>
@@ -322,67 +293,59 @@
 					Sonstige
 				</combo_item>
 			</combo_box>
-			<check_box label="Ab-18-Inhalt" name="MatureCheck"
-			     tool_tip="Die Informationen oder Inhalte Ihrer Parzelle sind nicht jugenfrei." />
-			<check_box label="Liste im Web veröffentlichen" name="PublishCheck"
-			     tool_tip="Veröffentlicht Informationen über Ihre Parzelle im Web." />
-			<button label="?" label_selected="?" name="?" />
-			<text type="string" length="1" name="Snapshot:">
+			<button label="?" label_selected="?" name="?"/>
+			<check_box label="Ab-18-Inhalt" name="MatureCheck" tool_tip="Die Informationen oder Inhalte Ihrer Parzelle sind nicht jugenfrei."/>
+			<text name="Snapshot:">
 				Foto:
 			</text>
-			<texture_picker label="" name="snapshot_ctrl"
-			     tool_tip="Klicken Sie hier, um ein Bild auszuwählen" />
-			<text type="string" length="1" name="Landing Point: (none)">
-				Landepunkt: (keiner)
-			</text>
+			<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
 			<text name="landing_point">
 				Landepunkt: [LANDING]
 			</text>
-			<text name="landing_point_none">
-				(-)
-			</text>
-			<button label="Festlegen" label_selected="Festlegen" left="234" name="Set"
-			     tool_tip="Den Landepunkt auf die aktuelle Position des Avatars setzen. Muss sich innerhalb dieser Parzelle befinden."
-			     width="70" />
-			<button label="Löschen" label_selected="Löschen" left="312" name="Clear"
-			     tool_tip="Landepunkt löschen." width="70" />
-			<text type="string" length="1" name="Teleport Routing: ">
+			<string name="landing_point_none">
+				(keiner)
+			</string>
+			<button label="Festlegen" label_selected="Festlegen" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70" left="234"/>
+			<button label="Löschen" label_selected="Löschen" name="Clear" tool_tip="Landepunkt löschen." width="70" left="312"/>
+			<text name="Teleport Routing: ">
 				Teleport-Route:
 			</text>
-			<combo_box name="landing type"
-			     tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
-				<combo_item type="string" length="1" name="Blocked">
+			<combo_box name="landing type" >
+				<combo_item name="Blocked">
 					Blockiert
 				</combo_item>
-				<combo_item type="string" length="1" name="LandingPoint">
+				<combo_item name="LandingPoint">
 					Landepunkt
 				</combo_item>
-				<combo_item type="string" length="1" name="Anywhere">
+				<combo_item name="Anywhere">
 					Überall
 				</combo_item>
 			</combo_box>
-			<text name="push_restrict_text">
-				Stoßen beschränken
-			</text>
-			<text name="push_restrict_region_text">
-				Stoßen beschränken (regional)
-			</text>
+			<string name="push_restrict_text">
+				Kein Stoßen
+			</string>
+			<string name="push_restrict_region_text">
+				Kein Stoßen (regional)
+			</string>
 		</panel>
 		<panel label="Medien" name="land_media_panel">
-			<text name="at URL:">
-				Medien-URL:
-			</text>
-			<button label="Einstellen..." label_selected="Einstellen..." name="set_media_url" />
 			<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" />
+			<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" />
+			<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.)
@@ -391,20 +354,15 @@ des Abspielen-Pfeils den Film oder die Webseite an.)
 				Medien-
 Optionen:
 			</text>
-			<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.">
+			<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." />
+			<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>
@@ -414,28 +372,11 @@ Optionen:
 			<text name="Sound:">
 				Sound:
 			</text>
-			<check_box label="Umgebungssound auf diese Parzelle beschränken" name="check sound local" />
-			<text type="string" length="1" name="Music URL:">
-				Musik-URL:
-			</text>
-			<text type="string" length="1" name="Media texture:">
-				Textur
-ersetzen:
-			</text>
-			<text type="string" length="1" name="Replace this texture:">
-				Diese Textur ersetzen:
-			</text>
-			<texture_picker label="" name="media texture"
-			     tool_tip="Klicken Sie hier, um ein Bild auszuwählen" />
-			<text type="string" length="1" name="with content from this URL:">
-				mit Inhalt von diesem URL ersetzen:
-			</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="Umgebungssound auf diese Parzelle beschränken" name="check sound local"/>
 			<text name="Voice settings:">
 				Voice:
 			</text>
-			<radio_group name="parcel_voice_channel">
+			<radio_group name="parcel_voice_channel" width="310">
 				<radio_item name="Estate">
 					Voice-Channel des Grundstücks verwenden
 				</radio_item>
@@ -448,67 +389,42 @@ ersetzen:
 			</radio_group>
 		</panel>
 		<panel label="Zugang" name="land_access_panel">
-			<text type="string" length="1" name="Limit access to this parcel to:">
+			<text name="Limit access to this parcel to:">
 				Zugang zu dieser Parzelle
 			</text>
-			<check_box label="Freien Zugang erlauben" name="public_access" />
+			<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." />
+			<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."/>
 			<string name="estate_override">
 				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
 			</string>
-			<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck"
-			     tool_tip="Gruppe im Register &apos;Allgemein&apos; festlegen." />
+			<check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register &apos;Allgemein&apos; 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_item name="Anyone">
-					Jeder
+					Jeden
 				</combo_item>
 				<combo_item name="Group">
 					Gruppe
 				</combo_item>
 			</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>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="add_allowed" />
-			<button label="Entfernen" label_selected="Entfernen" name="remove_allowed" />
-			<check_box label="Verbannen" name="BanCheck">
+			<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
-			</check_box>
-			<name_list name="AccessList" tool_tip="([LISTED] angezeigt, max. [MAX])">
-				<column label="Allowed Residents" name="name" />
-			</name_list>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="Add..." />
-			<button label="Entfernen" label_selected="Entfernen" name="Remove" />
-			<check_box label="Pässe verkaufen an:" name="PassCheck"
-			     tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle" />
-			<spinner label="Preis in L$:" name="PriceSpin" />
-			<spinner label="Online-Zeit:" name="HoursSpin" />
-			<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>
-		<panel label="Verbannen" name="land_ban_panel">
-			<check_box label="Diese Avatare verbannen: ([LISTED] angezeigt, max. [MAX])"
-			     name="LandBanCheck" />
-			<name_list name="LandBanList">
-				<column label="Banned Residents" name="name" />
-			</name_list>
-			<button label="Hinzufügen..." label_selected="Hinzufügen..." name="Add..." />
-			<button label="Entfernen" label_selected="Entfernen" name="Remove" />
-			<text type="string" length="1" name="Deny by Payment Status:">
-				Nach Zahlungsstatus verweigern:
-			</text>
-			<check_box label="Verweigern - keine archivierte Zahlungsinfo" name="DenyAnonymousCheck" />
-			<check_box label="Verweigern - Zahlungsinfo archiviert" name="DenyIdentifiedCheck" />
-			<check_box label="Verweigern - Zahlungsinfo verwendet" name="DenyTransactedCheck" />
+			</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 3cbcf08..c8a67a8 100644
--- a/indra/newview/skins/default/xui/de/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_animation_preview.xml
@@ -82,9 +82,6 @@
 	</text>
 	<combo_box label="" name="emote_combo"
 	     tool_tip="Controls what face does during animation.">
-		<combo_item name="[None]">
-			[None]
-		</combo_item>
 		<combo_item name="Aaaaah">
 			Aaaaah
 		</combo_item>
@@ -118,9 +115,6 @@
 		<combo_item name="Laugh">
 			Lachen
 		</combo_item>
-		<combo_item name="Plllppt">
-			Plllppt
-		</combo_item>
 		<combo_item name="Repulsed">
 			Zurückgestoßen
 		</combo_item>
@@ -152,8 +146,8 @@
 	<slider label="" name="playback_slider" />
 	<text name="bad_animation_text">
 		Animationsdatei konnte nicht gelesen werden.
-	
-	Wir empfehlen exportierte BVH-Dateien aus Poser 4.
+
+Wir empfehlen exportierte BVH-Dateien aus Poser 4.
 	</text>
 	<button label="Abbrechen" name="cancel_btn" />
 	<button label="Hochladen ([AMOUNT] L$)" name="ok_btn" />
diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml
new file mode 100644
index 0000000..d1ec9d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_beacons.xml
@@ -0,0 +1,15 @@
+<?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>
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 c2ee63e..01858b3 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_contents.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="Inhalte kaufen">
+<floater name="floater_buy_contents" title="Inhalte kaufen" min_width="300">
 	<text name="contains_text">
 		[NAME] enthält:
 	</text>
 	<text name="buy_text">
 		[AMOUNT] L$ von [NAME] kaufen?
 	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" />
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" width="73" />
 	<button label="Kaufen" label_selected="Kaufen" name="buy_btn" />
 	<check_box label="Kleidung jetzt anziehen" name="wear_check" />
 	<text name="no_copy_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 adfa766..332c900 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml
@@ -52,7 +52,7 @@
 	<text name="info_price">
 		1500 L$, Objekte eingeschlossen
 	</text>
-	<text name="info_action">
+	<text name="info_action" width="275">
 		Bei Landkauf:
 	</text>
 	<text name="error_message">
@@ -204,9 +204,7 @@ unterstützt [AMOUNT2] Objekte
 		mit Objekten verkauft
 	</text>
 	<text name="insufficient_land_credits">
-		Die Gruppe [GROUP] benötigt ausreichende 
-Landnutzungsrechte für diese Parzelle, um den Kauf 
-abzuschließen.
+		Die Gruppe [GROUP] benötigt ausreichende Landnutzungsrechte für diese Parzelle, um den Kauf abzuschließen.
 	</text>
 	<text name="have_enough_lindens">
 		Sie haben [AMOUNT] L$, genug zum Kauf dieses Landes.
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 910df26..3cfa59f 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_object.xml
@@ -6,7 +6,7 @@
 	<text name="buy_text">
 		[AMOUNT] L$ von [NAME] kaufen?
 	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn" />
+	<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
diff --git a/indra/newview/skins/default/xui/de/floater_chat_history.xml b/indra/newview/skins/default/xui/de/floater_chat_history.xml
index 94118a0..4a1d91b 100644
--- a/indra/newview/skins/default/xui/de/floater_chat_history.xml
+++ b/indra/newview/skins/default/xui/de/floater_chat_history.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="chat floater" title="Lokaler Chat">
 	<string name="ringing">
 		Verbindung mit In-Welt-Voice-Chat...
@@ -42,6 +42,9 @@
 					<flyout_button_item name="say_item">
 						Reden
 					</flyout_button_item>
+					<flyout_button_item name="whisper_item">
+						Flüstern
+					</flyout_button_item>
 				</flyout_button>
 			</panel>
 		</layout_panel>
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 b97e3d5..bb9e5ef 100644
--- a/indra/newview/skins/default/xui/de/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/de/floater_env_settings.xml
@@ -14,7 +14,7 @@
 	</text>
 	<color_swatch name="EnvWaterColor" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen" />
 	<text name="EnvWaterFogText">
-		Wasser
+		Wasser-
 trübung
 	</text>
 	<button label="Grundstückszeit verw." name="EnvUseEstateTimeButton" />
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 6356dff..ac51786 100644
--- a/indra/newview/skins/default/xui/de/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml
@@ -1,25 +1,25 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="godtools floater" title="Gott-Tools">
+<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" />
+			     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" />
+			     name="Flush This Region&apos;s Map Visibility Caches" width="285" />
 		</panel>
 		<panel label="Region" name="region">
-			<text name="Sim Name:">
+			<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 &apos;Region/Grundstück&apos; &gt; &apos;Terrain&apos;." />
-			<check_box label="Zuhause auf Teleport zurücksetzen" name="check reset home"
-			     tool_tip="Wenn Einwohner wegteleportieren, ihr Zuhause auf Zielposition setzen." />
+			<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." />
+			     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"
@@ -29,28 +29,30 @@
 			<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." />
+			     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." />
+			     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." />
+			     tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118" />
 			<text name="estate id">
 				Grundstücks-ID:
 			</text>
 			<text name="parent id">
-				Übergeordnet-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" />
-			<line_editor name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" />
-			<text name="Redirect to Grid: ">
+			<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>
-			<text name="billable factor 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">
@@ -62,21 +64,21 @@
 			     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." />
+			     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." />
+			     tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130" left="136"/>
 		</panel>
 		<panel label="Objekte" name="objects">
-			<text name="Sim Name:">
+			<text name="Sim Name:" width="55">
 				Sim-Name:
 			</text>
 			<text name="region name">
-				Walisisch
+				Welsh
 			</text>
-			<check_box label="Skripts deaktivieren" name="disable scripts"
+			<check_box label="Skripts &#10;deaktivieren" name="disable scripts"
 			     tool_tip="Skripts in dieser Region komplett abschalten" />
-			<check_box label="Kollisionen deaktivieren" name="disable collisions"
+			<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" />
@@ -101,12 +103,12 @@
 			     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." />
+			     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." />
+			     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." />
+			     tool_tip="Zeigt eine Liste aller Skripts mit Häufigkeit an." width="130" />
 		</panel>
 		<panel label="Anfrage" name="request">
 			<text name="Destination:">
diff --git a/indra/newview/skins/default/xui/de/floater_html.xml b/indra/newview/skins/default/xui/de/floater_html.xml
index 5d5877e..37f9ea5 100644
--- a/indra/newview/skins/default/xui/de/floater_html.xml
+++ b/indra/newview/skins/default/xui/de/floater_html.xml
@@ -3,7 +3,7 @@
 	<button label="Schließen" name="close_btn" />
 	<button label="Zurück" name="back_btn" />
 	<button label="Zuhause" name="home_btn" />
-	<button label="Weiterleiten" name="forward_btn" />
+	<button label="Weiter" name="forward_btn" />
 	<button label="Los" name="go_btn" />
 	<string name="home_page_url">
 		http://de.secondlife.com
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 2b63a90..0028f1d 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
@@ -30,7 +30,7 @@
 		Sie können:
 	</text>
 	<check_box label="Bearbeiten" name="CheckOwnerModify" />
-	<check_box label="Kopieren" name="CheckOwnerCopy" />
+	<check_box label="Kopieren" name="CheckOwnerCopy" left_delta="85" />
 	<check_box label="Verkaufen/Weggeben" name="CheckOwnerTransfer" />
 	<text name="BaseMaskDebug">
 		B:
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 f9dcfc9..2594489 100644
--- a/indra/newview/skins/default/xui/de/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
@@ -2,8 +2,8 @@
 <floater name="land holdings floater" title="Mein Land">
 	<scroll_list name="parcel list">
 		<column label="Name" name="name" />
-		<column label="Location" name="location" />
-		<column label="Area" name="area" />
+		<column label="Lage" name="location" />
+		<column label="Gebiet" name="area" />
 		<column label="" name="hidden" />
 	</scroll_list>
 	<button label="Teleportieren" label_selected="Teleportieren" name="Teleport"
@@ -14,8 +14,8 @@
 		Beiträge zu Ihren Gruppen:
 	</text>
 	<scroll_list name="grant list">
-		<column label="Group" name="group" />
-		<column label="Area" name="area" />
+		<column label="Gruppe" name="group" />
+		<column label="Gebiet" name="area" />
 	</scroll_list>
 	<text name="allowed_label">
 		Zulässiger Landbesitz bei aktuellem Zahlungsplan:
diff --git a/indra/newview/skins/default/xui/de/floater_name_description.xml b/indra/newview/skins/default/xui/de/floater_name_description.xml
index 5f5e1cc..052f654 100644
--- a/indra/newview/skins/default/xui/de/floater_name_description.xml
+++ b/indra/newview/skins/default/xui/de/floater_name_description.xml
@@ -6,6 +6,6 @@
 	<text name="description_label">
 		Beschreibung:
 	</text>
-	<button label="Abbrechen" name="cancel_btn" />
-	<button label="Hochladen (10 L$)" name="ok_btn" />
+	<button label="Abbrechen" name="cancel_btn" width="80" />
+	<button label="Hochladen (10 L$)" name="ok_btn" width="120" />
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml
index c7f9b74..0b5a365 100644
--- a/indra/newview/skins/default/xui/de/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/de/floater_openobject.xml
@@ -4,7 +4,7 @@
 		[DESC]:
 	</text>
 	<button label="In Inventar kopieren" label_selected="In Inventar kopieren"
-	     name="copy_to_inventory_button" />
+	     name="copy_to_inventory_button" width="132" />
 	<button label="Kopieren und anziehen" label_selected="Kopieren und anziehen"
-	     name="copy_and_wear_button" />
+	     name="copy_and_wear_button" width="132" left="150" />
 </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 b3d8921..eaf95a9 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,30 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="Give Money" title="">
-	<text type="string" length="1" name="payee_group">
+	<text type="string" length="1" name="payee_group" width="105">
 		Gruppe bezahlen:
 	</text>
-	<text type="string" length="1" name="payee_resident">
+	<text type="string" length="1" name="payee_resident" width="118">
 		Einwohner bezahlen:
 	</text>
-	<text type="string" length="1" name="payee_name">
+	<text type="string" length="1" name="payee_name" left="128" width="168">
 		[FIRST] [LAST]
 	</text>
-	<text type="string" length="1" name="object_name_label">
+	<text type="string" length="1" name="object_name_label" halign="left">
 		Über Objekt:
 	</text>
-	<text type="string" length="1" name="object_name_text">
+	<text type="string" length="1" name="object_name_text" left="105">
 		...
 	</text>
-	<text type="string" length="1" name="fastpay text">
+	<text type="string" length="1" name="fastpay text" width="95" halign="left">
 		Schnellzahlung:
 	</text>
 	<text type="string" length="1" name="amount text">
 		Betrag:
 	</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" />
+	<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" />
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" width="76" />
 </floater>
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 0d5a6b1..c807556 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
@@ -3,8 +3,9 @@
 	<text type="string" length="1" 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." />
+	     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." />
+	     tool_tip="Gibt diese Animation so wieder, dass nur Sie sie sehen." left="171" width="116" />
 </floater>
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 da6affb..6e366e5 100644
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -1,5 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="floater_report_abuse" title="Missbrauch melden">
+	<texture_picker label="" name="screenshot"/>
+	<check_box label="Screenshot einschließen" name="screen_check" bottom_delta="-20"/>
 	<text name="reporter_title">
 		Melder:
 	</text>
@@ -15,17 +17,14 @@
 	<text name="pos_title">
 		Position:
 	</text>
-	<texture_picker name="screenshot" />
-	<check_box label="Screenshot einschließen" name="screen_check" bottom_delta="-20" />
 	<text name="pos_field">
 		{128.1, 128.1, 15.4}
 	</text>
-	<button label="" label_selected="" name="pick_btn"
-	     tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus" />
 	<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>
@@ -38,11 +37,7 @@ dann auf das Objekt:
 	<text name="owner_name">
 		Hendrerit Vulputate
 	</text>
-	<combo_box name="category_combo"
-	     tool_tip="Category -- select the category that best describes this report">
-		<combo_item name="Selectcategory">
-			Kategorie auswählen
-		</combo_item>
+	<combo_box name="category_combo" >
 		<combo_item name="Select_category">
 			Kategorie auswählen
 		</combo_item>
@@ -64,14 +59,11 @@ dann auf das Objekt:
 		<combo_item name="Assault__Weapons_testing_sandbox">
 			Angriff &gt; Sandbox für Waffentest
 		</combo_item>
-		<combo_item name="Copyright_or_intellectual_property_violation">
-			Urheberrechtsverletzung
-		</combo_item>
 		<combo_item name="Commerce__Failure_to_deliver_product_or_service">
-			Handel &gt; Produkt nicht geliefer oder Dienstleistung nicht erbracht
+			Handel &gt; Produkt nicht geliefert oder Dienstleistung nicht erbracht
 		</combo_item>
-		<combo_item name="Disclosure__First_Life_information">
-			Offenlegung &gt; Private Benutzerdaten
+		<combo_item name="Disclosure__Real_world_information">
+			Offenlegung &gt; Informationen aus realer Welt
 		</combo_item>
 		<combo_item name="Disclosure__Remotely_monitoring chat">
 			Offenlegung &gt; Abhören eines Chats aus der Ferne
@@ -136,26 +128,14 @@ dann auf das Objekt:
 		<combo_item name="Indecency__Mature_content_in_PG_region">
 			Unanständigkeit &gt; Nicht jugendfreier Inhalt in &quot;Jugendfrei&quot;-Region
 		</combo_item>
-		<combo_item name="Intolerance">
-			Intoleranz
-		</combo_item>
-		<combo_item name="Harassment">
-			Belästigung
+		<combo_item name="Intellectual_property_infringement_Content_Removal">
+			Urheberrechtsverletzung &gt; Entfernen von Inhalten
 		</combo_item>
-		<combo_item name="Assault">
-			Angriff
+		<combo_item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit">
+			Urheberrechtsverletzung &gt; CopyBot oder Berechtigungs-Exploit
 		</combo_item>
-		<combo_item name="Disclosure">
-			Offenlegen
-		</combo_item>
-		<combo_item name="Indecency">
-			Unanständigkeit
-		</combo_item>
-		<combo_item name="Age">
-			Alter
-		</combo_item>
-		<combo_item name="Parcel">
-			Parzelle
+		<combo_item name="Intolerance">
+			Intoleranz
 		</combo_item>
 		<combo_item name="Land__Abuse_of_sandbox_resources">
 			Land &gt; Missbrauch der Sandbox-Ressourcen
@@ -169,9 +149,6 @@ dann auf das Objekt:
 		<combo_item name="Land__Encroachment__Trees_plants">
 			Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen
 		</combo_item>
-		<combo_item name="Trademark_violation">
-			Markenrechtsverletzung
-		</combo_item>
 		<combo_item name="Wagering_gambling">
 			Wetten/Glücksspiel
 		</combo_item>
@@ -182,10 +159,8 @@ dann auf das Objekt:
 	<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" />
+	<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>
@@ -204,6 +179,6 @@ Objekt, wenn möglich.
 	<text name="incomplete_title" bottom_delta="-20">
 		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" />
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
+	<button label="Missbrauch melden" label_selected="Missbrauch melden" name="send_btn"/>
 </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 b2a1b13..63d5ef2 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,4 @@
 <?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" />
+	<button label="Schließen" label_selected="Schließen" name="close" left="215" width="72"/>
 </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 659207d..d64b9dc 100644
--- a/indra/newview/skins/default/xui/de/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
@@ -13,5 +13,5 @@
 	<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" />
+	<button label="Standard wiederherstellen" name="default_btn" width="170" />
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml
index 091f803..053c471 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">
+<floater name="telehub" title="Telehub" min_height="310" height="310"  >
 	<text name="status_text_connected">
 		Telehub verbunden mit Objekt [OBJECT]
 	</text>
@@ -9,20 +9,24 @@
 	<text name="help_text_connected">
 		Klicken Sie zum Entfernen auf &apos;Trennen&apos;.
 	</text>
-	<text name="help_text_not_connected">
-		Wählen Sie ein Objekt und klicken Sie auf &apos;Mit Telehub verbinden&apos;.
+	<text name="help_text_not_connected" height="38" bottom_delta="-18" >
+		Wählen Sie ein Objekt und klicken Sie auf
+&apos;Mit Telehub verbinden&apos;.
 	</text>
-	<button label="Mit Telehub verbinden" name="connect_btn" />
-	<button label="Trennen" name="disconnect_btn" />
-	<text name="spawn_points_text">
+	<button label="Mit Telehub verbinden" name="connect_btn" width="122" />
+	<button label="Trennen" name="disconnect_btn" left="142" width="98" />
+	<text name="spawn_points_text" width="230">
 		Spawn-Punkte (Positionen, nicht Objekte):
 	</text>
 	<button label="Spawn hinzufügen" name="add_spawn_point_btn" />
 	<button label="Spawn entfernen" name="remove_spawn_point_btn" />
 	<text name="spawn_point_help">
-		Wählen Sie ein Objekt und klicken zur Positionsangabe auf &apos;Hinzufügen&apos;.
-Anschließend können sie das Objekt verschieben oder löschen.
-Positionsangaben sind relativ zum Telehub-Mittelpunkt.
-Wählen Sie ein Objekt aus, um seine Position in der Welt anzuzeigen.
+		Wählen Sie ein Objekt und klicken zur
+Positionsangabe auf &apos;Hinzufügen&apos;. Anschließend
+können sie das Objekt verschieben oder löschen.
+Positionsangaben sind relativ zum
+Telehub-Mittelpunkt.
+Wählen Sie ein Objekt aus, um seine Position in
+der Welt anzuzeigen.
 	</text>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index a04851c..0f30d6e 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -476,7 +476,7 @@
 			</text>
 			<combo_box name="combobox shininess">
 				<combo_item name="None">
-					Keine
+					Kein
 				</combo_item>
 				<combo_item name="Low">
 					Niedrig
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 d7abf5c..3e9dda9 100644
--- a/indra/newview/skins/default/xui/de/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml
@@ -4,10 +4,10 @@
 		Wird geladen...
 	</text>
 	<scroll_list name="objects_list">
-		<column label="Score" name="score" />
-		<column label="Name" name="name" />
-		<column label="Owner" name="owner" />
-		<column label="Location" name="location" />
+		<column label="Wertung" name="score" width="65" />
+		<column label="Name" name="name" width="135" />
+		<column label="Eigentümer" name="owner" />
+		<column label="Position" name="location" width="125" />
 		<column label="Uhrzeit" name="time" />
 	</scroll_list>
 	<line_editor bg_readonly_color="clear" bottom_delta="3" enabled="false"
diff --git a/indra/newview/skins/default/xui/de/floater_url_entry.xml b/indra/newview/skins/default/xui/de/floater_url_entry.xml
index 370b4f0..c230d9c 100644
--- a/indra/newview/skins/default/xui/de/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/de/floater_url_entry.xml
@@ -4,8 +4,7 @@
 		Medien-URL:
 	</text>
 	<button label="OK" name="ok_btn" />
-	<button label="Abbrechen" name="cancel_btn" />
-	<button label="Abbrechen" name="cancel_btn2" />
+	<button label="Abbrechen" name="cancel_btn" width="75" />
 	<button label="Löschen" name="clear_btn" />
 	<text name="loading_label">
 		Wird geladen...
diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml
index efd606c..d8ec1a2 100644
--- a/indra/newview/skins/default/xui/de/floater_water.xml
+++ b/indra/newview/skins/default/xui/de/floater_water.xml
@@ -11,16 +11,17 @@
 			<text name="BHText">
 				Wassertrübungsfarbe
 			</text>
-			<button label=" ?" name="WaterFogColorHelp" />
+			<button label=" ?" name="WaterFogColorHelp" left="175" />
 			<color_swatch name="WaterFogColor" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen" />
 			<text name="WaterFogDensText">
 				Wassertrübungsdichte
 			</text>
-			<button label=" ?" name="WaterFogDensityHelp" />
+			<button label=" ?" name="WaterFogDensityHelp" left="175" />
 			<text name="WaterUnderWaterFogModText">
 				Wassertrübungs-Modifikator
 			</text>
-			<button label=" ?" name="WaterUnderWaterFogModHelp" />
+			<button label=" ?" name="WaterUnderWaterFogModHelp" left="175" />
+			<slider bottom_delta="-34" name="WaterUnderWaterFogMod" />
 			<text name="BDensText">
 				Reflexionswellengröße
 			</text>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 0934a28..971c662 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -1,256 +1,201 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu_bar name="Main Menu">
 	<menu label="Datei" name="File">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" />
-		<menu_item_call label="Bild hochladen ([COST] L$)..." name="Upload Image" />
-		<menu_item_call label="Sound hochladen ([COST] L$)..." name="Upload Sound" />
-		<menu_item_call label="Animation hochladen ([COST] L$)..." name="Upload Animation" />
-		<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_call label="Fenster schließen" name="Close Window" />
-		<menu_item_call label="Alle Fenster schließen" name="Close All Windows" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_call label="Textur speichern unter..." name="Save Texture As..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="Foto machen" name="Take Snapshot" />
-		<menu_item_call label="Foto auf Datenträger" name="Snapshot to Disk" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu label="Fenstergröße einstellen" name="Set Window Size">
-			<menu_item_call label="320x240" name="320x240" />
-			<menu_item_call label="640x480" name="640x480" />
-			<menu_item_call label="800x600" name="800x600" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_call label="720x480 (NTSC)" name="720x480 (NTSC)" />
-			<menu_item_call label="768x576 (PAL)" name="768x576 (PAL)" />
-		</menu>
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="Beenden" name="Quit" />
+		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
+		<menu_item_call label="Bild hochladen ([COST] L$)..." name="Upload Image"/>
+		<menu_item_call label="Sound hochladen ([COST] L$)..." name="Upload Sound"/>
+		<menu_item_call label="Animation hochladen ([COST] L$)..." name="Upload Animation"/>
+		<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_call label="Fenster schließen" name="Close Window"/>
+		<menu_item_call label="Alle Fenster schließen" name="Close All Windows"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_call label="Textur speichern unter..." name="Save Texture As..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="Foto machen" name="Take Snapshot"/>
+		<menu_item_call label="Foto auf Datenträger" name="Snapshot to Disk"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="Beenden" name="Quit"/>
 	</menu>
 	<menu label="Bearbeiten" name="Edit">
-		<menu_item_call label="Rückgängig" name="Undo" />
-		<menu_item_call label="Neu" name="Redo" />
-		<menu_item_separator label="-----------" name="separator" />
-		<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_separator label="-----------" name="separator2" />
-		<menu_item_call label="Suchen..." name="Search..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="Alle auswählen" name="Select All" />
-		<menu_item_call label="Auswahl aufheben" name="Deselect" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_call label="Duplizieren" name="Duplicate" />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu label="Objekt anhängen" name="Attach Object" />
-		<menu label="Objekt abnehmen" name="Detach Object" />
+		<menu_item_call label="Rückgängig" name="Undo"/>
+		<menu_item_call label="Neu" name="Redo"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<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_separator label="-----------" name="separator2"/>
+		<menu_item_call label="Suchen..." name="Search..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="Alle auswählen" name="Select All"/>
+		<menu_item_call label="Auswahl aufheben" name="Deselect"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="Duplizieren" name="Duplicate"/>
+		<menu_item_separator label="-----------" name="separator5"/>
+		<menu label="Objekt anhängen" name="Attach Object"/>
+		<menu label="Objekt abnehmen" name="Detach Object"/>
 		<menu label="Kleider ausziehen" name="Take Off Clothing">
-			<menu_item_call label="Hemd" name="Shirt" />
-			<menu_item_call label="Hose" name="Pants" />
-			<menu_item_call label="Schuhe" name="Shoes" />
-			<menu_item_call label="Socken" name="Socks" />
-			<menu_item_call label="Jacke" name="Jacket" />
-			<menu_item_call label="Handschuhe" name="Gloves" />
-			<menu_item_call label="Unterhemd" name="Menu Undershirt" />
-			<menu_item_call label="Unterhose" name="Menu Underpants" />
-			<menu_item_call label="Rock" name="Skirt" />
-			<menu_item_call label="Alle Kleider" name="All Clothes" />
+			<menu_item_call label="Hemd" name="Shirt"/>
+			<menu_item_call label="Hose" name="Pants"/>
+			<menu_item_call label="Schuhe" name="Shoes"/>
+			<menu_item_call label="Socken" name="Socks"/>
+			<menu_item_call label="Jacke" name="Jacket"/>
+			<menu_item_call label="Handschuhe" name="Gloves"/>
+			<menu_item_call label="Unterhemd" name="Menu Undershirt"/>
+			<menu_item_call label="Unterhose" name="Menu Underpants"/>
+			<menu_item_call label="Rock" name="Skirt"/>
+			<menu_item_call label="Alle Kleider" name="All Clothes"/>
 		</menu>
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="Gesten..." name="Gestures..." />
-		<menu_item_call label="Profil..." name="Profile..." />
-		<menu_item_call label="Aussehen..." name="Appearance..." />
-		<menu_item_separator label="-----------" name="separator7" />
-		<menu_item_check label="Freunde..." name="Friends..." />
-		<menu_item_call label="Gruppen..." name="Groups..." />
-		<menu_item_separator label="-----------" name="separator8" />
-		<menu_item_call label="Einstellungen..." name="Preferences..." />
+		<menu_item_separator label="-----------" name="separator6"/>
+		<menu_item_call label="Gesten..." name="Gestures..."/>
+		<menu_item_call label="Profil..." name="Profile..."/>
+		<menu_item_call label="Aussehen..." name="Appearance..."/>
+		<menu_item_separator label="-----------" name="separator7"/>
+		<menu_item_check label="Freunde..." name="Friends..."/>
+		<menu_item_call label="Gruppen..." name="Groups..."/>
+		<menu_item_separator label="-----------" name="separator8"/>
+		<menu_item_call label="Einstellungen..." name="Preferences..."/>
 	</menu>
 	<menu label="Ansicht" name="View">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" />
-		<menu_item_call label="Mouselook" name="Mouselook" />
-		<menu_item_check label="Bauen" name="Build" />
-		<menu_item_check label="Joystick-Flycam" name="Joystick Flycam" />
-		<menu_item_call label="Ansicht zurücksetzen" name="Reset View" />
-		<menu_item_call label="Letzten Chatter ansehen" name="Look at Last Chatter" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_check label="Symbolleiste" name="Toolbar" />
-		<menu_item_check label="Lokaler Chat" name="Chat History" />
-		<menu_item_check label="Unterhalten" name="Instant Message" />
-		<menu_item_call label="Inventar" name="Inventory" />
-		<menu_item_check label="Aktive Sprecher" name="Active Speakers" />
-		<menu_item_check label="Stummschalten-Liste" name="Mute List" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_check label="Kamerasteuerung" name="Camera Controls" />
-		<menu_item_check label="Bewegungssteuerung" name="Movement Controls" />
-		<menu_item_check label="Weltkarte" name="World Map" />
-		<menu_item_check label="Minikarte" name="Mini-Map" />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_check label="Statistikleiste" name="Statistics Bar" />
-		<menu_item_check label="Grundstücksgrenzen" name="Property Lines" />
-		<menu_item_check label="Landeigentümer" name="Land Owners" />
-		<menu_item_separator label="-----------" name="separator4" />
+		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
+		<menu_item_call label="Mouselook" name="Mouselook"/>
+		<menu_item_check label="Bauen" name="Build"/>
+		<menu_item_check label="Joystick-Flycam" name="Joystick Flycam"/>
+		<menu_item_call label="Ansicht zurücksetzen" name="Reset View"/>
+		<menu_item_call label="Letzten Chatter ansehen" name="Look at Last Chatter"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_check label="Symbolleiste" name="Toolbar"/>
+		<menu_item_check label="Lokaler Chat" name="Chat History"/>
+		<menu_item_check label="Unterhalten" name="Instant Message"/>
+		<menu_item_call label="Inventar" name="Inventory"/>
+		<menu_item_check label="Aktive Sprecher" name="Active Speakers"/>
+		<menu_item_check label="Stummschalten-Liste" name="Mute List"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_check label="Kamerasteuerung" name="Camera Controls"/>
+		<menu_item_check label="Bewegungssteuerung" name="Movement Controls"/>
+		<menu_item_check label="Weltkarte" name="World Map"/>
+		<menu_item_check label="Minikarte" name="Mini-Map"/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_check label="Statistikleiste" name="Statistics Bar"/>
+		<menu_item_check label="Grundstücksgrenzen" name="Property Lines"/>
+		<menu_item_check label="Landeigentümer" name="Land Owners"/>
+		<menu_item_separator label="-----------" name="separator4"/>
 		<menu label="Schwebe-Tipps" name="Hover Tips">
-			<menu_item_check label="Tipps anzeigen" name="Show Tips" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_check label="Landtipps" name="Land Tips" />
-			<menu_item_check label="Tipps zu allen Objekten" name="Tips On All Objects" />
-		</menu>
-		<menu_item_check label="Alt zeigt physische Objekte an" name="Alt Shows Physical" />
-		<menu_item_check label="Beacons immer an" name="Beacons Always On" />
-		<menu_item_check label="Durchsichtig hervorheben" name="Highlight Transparent" />
-		<menu label="Beacons" name="Beacons">
-			<menu_item_check label="Auf Berührung beschränkte Skriptobjekte"
-			     name="Scripted Objects With Touch Only" />
-			<menu_item_check label="Scripting-Objekte" name="Scripted Objects" />
-			<menu_item_check label="Physische Objekte" name="Physical Objects" />
-			<menu_item_check label="Soundquellen" name="Sound Sources" />
-			<menu_item_check label="Partikelquellen" name="Particle Sources" />
-			<menu_item_check label="Glanzlichter anzeigen" name="Render Highlights" />
-			<menu_item_check label="Beacons anzeigen" name="Render Beacons" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_separator label=" -----------" name="separator2" />
-			<menu_item_check label="Partikel ausblenden" name="Hide Particles" />
-			<menu_item_separator label=" -----------" name="separator3" />
-			<menu label="Beacon-Breite" name="Beacon Width">
-				<menu_item_call label=" 1" name="Beacon Width 1" />
-				<menu_item_call label=" 4" name="Beacon Width 4" />
-				<menu_item_call label=" 16" name="Beacon Width 16" />
-				<menu_item_call label=" 32" name="Beacon Width 32" />
-			</menu>
+			<menu_item_check label="Tipps anzeigen" name="Show Tips"/>
+			<menu_item_separator label="-----------" name="separator"/>
+			<menu_item_check label="Landtipps" name="Land Tips"/>
+			<menu_item_check label="Tipps zu allen Objekten" name="Tips On All Objects"/>
 		</menu>
-		<menu_item_check label="HUD-Anhänge anzeigen" name="Show HUD Attachments" />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="Hinein zoomen" name="Zoom In" />
-		<menu_item_call label="Zoom-Standard" name="Zoom Default" />
-		<menu_item_call label="Wegzoomen" name="Zoom Out" />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="Vollbild" name="Toggle Fullscreen" />
-		<menu_item_call label="UI-Größe auf Standard setzen" name="Set UI Size to Default" />
+		<menu_item_check label="Durchsichtig hervorheben" name="Highlight Transparent"/>
+		<menu_item_check label="Beacons" name="beacons"/>
+		<menu_item_check label="Partikel ausblenden" name="Hide Particles"/>
+		<menu_item_check label="HUD-Anhänge anzeigen" name="Show HUD Attachments"/>
+		<menu_item_separator label="-----------" name="separator5"/>
+		<menu_item_call label="Hinein zoomen" name="Zoom In"/>
+		<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
+		<menu_item_call label="Wegzoomen" name="Zoom Out"/>
+		<menu_item_separator label="-----------" name="separator6"/>
+		<menu_item_call label="Vollbild" name="Toggle Fullscreen"/>
+		<menu_item_call label="UI-Größe auf Standard setzen" name="Set UI Size to Default"/>
 	</menu>
 	<menu label="Welt" name="World">
-		<menu_item_call label="Chat" name="Chat" />
-		<menu_item_call label="Geste starten" name="Start Gesture" />
-		<menu_item_check label="Immer rennen" name="Always Run" />
-		<menu_item_check label="Fliegen" name="Fly" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_call label="Landmarke hier setzen" name="Create Landmark Here" />
-		<menu_item_call label="Hier als Zuhause wählen" name="Set Home to Here" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_call label="Teleport nach Hause" name="Teleport Home" />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="Als abwesend anzeigen" name="Set Away" />
-		<menu_item_call label="Als beschäftigt anzeigen" name="Set Busy" />
-		<menu_item_call label="Alle Animationen stoppen" name="Stop All Animations" />
-		<menu_item_call label="Tasten freigeben" name="Release Keys" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_call label="Kontostatistik..." name="Account History..." />
-		<menu_item_call label="Mein Konto verwalten..." name="Manage My Account..." />
-		<menu_item_call label="L$ kaufen..." name="Buy and Sell L$..." />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="Mein Land..." name="My Land..." />
-		<menu_item_call label="Land-Info..." name="About Land..." />
-		<menu_item_call label="Land kaufen..." name="Buy Land..." />
-		<menu_item_call label="Region/Grundstück..." name="Region/Estate..." />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu label="Sonne erzwingen" name="Force Sun">
-			<menu_item_call label="Sonnenaufgang" name="Sunrise" />
-			<menu_item_call label="Mittags" name="Noon" />
-			<menu_item_call label="Sonnenuntergang" name="Sunset" />
-			<menu_item_call label="Mitternacht" name="Midnight" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_call label="Auf Regionsstandard zurücksetzen" name="Revert to Region Default" />
-		</menu>
+		<menu_item_call label="Chat" name="Chat"/>
+		<menu_item_check label="Immer rennen" name="Always Run"/>
+		<menu_item_check label="Fliegen" name="Fly"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_call label="Landmarke hier setzen" name="Create Landmark Here"/>
+		<menu_item_call label="Hier als Zuhause wählen" name="Set Home to Here"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_call label="Teleport nach Hause" name="Teleport Home"/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="Als abwesend anzeigen" name="Set Away"/>
+		<menu_item_call label="Als beschäftigt anzeigen" name="Set Busy"/>
+		<menu_item_call label="Alle Animationen stoppen" name="Stop All Animations"/>
+		<menu_item_call label="Tasten freigeben" name="Release Keys"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="Kontostatistik..." name="Account History..."/>
+		<menu_item_call label="Mein Konto verwalten..." name="Manage My Account..."/>
+		<menu_item_call label="L$ kaufen..." name="Buy and Sell L$..."/>
+		<menu_item_separator label="-----------" name="separator5"/>
+		<menu_item_call label="Mein Land..." name="My Land..."/>
+		<menu_item_call label="Land-Info..." name="About Land..."/>
+		<menu_item_call label="Land kaufen..." name="Buy Land..."/>
+		<menu_item_call label="Region/Grundstück..." name="Region/Estate..."/>
+		<menu_item_separator label="-----------" name="separator6"/>
 		<menu label="Umwelt-Einstellungen" name="Environment Settings">
-			<menu_item_call label="Sonnenaufgang" name="Sunrise" />
-			<menu_item_call label="Mittag" name="Noon" />
-			<menu_item_call label="Sonnenuntergang" name="Sunset" />
-			<menu_item_call label="Mitternacht" name="Midnight" />
-			<menu_item_call label="Auf Regionsstandard zurücksetzen" name="Revert to Region Default" />
-			<menu_item_separator label=" -----------" name="separator" />
-			<menu_item_call label="Umwelt-Editor" name="Environment Editor" />
+			<menu_item_call label="Sonnenaufgang" name="Sunrise"/>
+			<menu_item_call label="Mittag" name="Noon"/>
+			<menu_item_call label="Sonnenuntergang" name="Sunset"/>
+			<menu_item_call label="Mitternacht" name="Midnight"/>
+			<menu_item_call label="Auf Regionsstandard zurücksetzen" name="Revert to Region Default"/>
+			<menu_item_separator label="-----------" name="separator"/>
+			<menu_item_call label="Umwelt-Editor" name="Environment Editor"/>
 		</menu>
 	</menu>
 	<menu label="Werkzeug" name="Tools">
 		<menu label="Fehlermeldungen" name="Select Tool">
-			<menu_item_call label="Fokus" name="Focus" />
-			<menu_item_call label="Verschieben" name="Move" />
-			<menu_item_call label="Bearbeiten" name="Edit" />
-			<menu_item_call label="Erstellen" name="Create" />
-			<menu_item_call label="Land" name="Land" />
+			<menu_item_call label="Fokus" name="Focus"/>
+			<menu_item_call label="Verschieben" name="Move"/>
+			<menu_item_call label="Bearbeiten" name="Edit"/>
+			<menu_item_call label="Erstellen" name="Create"/>
+			<menu_item_call label="Land" name="Land"/>
+		</menu>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects"/>
+		<menu_item_check label="Nur bewegliche Objekte auswählen" name="Select Only Movable Objects"/>
+		<menu_item_check label="Nach Umgebung auswählen" name="Select By Surrounding"/>
+		<menu_item_check label="Ausgeblendete Auswahl anzeigen" name="Show Hidden Selection"/>
+		<menu_item_check label="Lichtradius für Auswahl anzeigen" name="Show Light Radius for Selection"/>
+		<menu_item_check label="Auswahlstrahl anzeigen" name="Show Selection Beam"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_check label="An Raster ausrichten" name="Snap to Grid"/>
+		<menu_item_call label="Objekt-XY an Raster ausrichten" name="Snap Object XY to Grid"/>
+		<menu_item_call label="Auswahl für Raster verwenden" name="Use Selection for Grid"/>
+		<menu_item_call label="Rasteroptionen..." name="Grid Options..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_check label="Verknüpfte Teile bearbeiten" name="Edit Linked Parts"/>
+		<menu_item_call label="Verknüpfung" name="Link"/>
+		<menu_item_call label="Verknüpfung aufheben" name="Unlink"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="Fokus auf Auswahl" name="Focus on Selection"/>
+		<menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection"/>
+		<menu_item_call label="Objekt kaufen" name="Menu Object Take"/>
+		<menu_item_call label="Kopie nehmen/machen" name="Take Copy"/>
+		<menu_item_call label="Objekt wieder im Inventar speichern" name="Save Object Back to My Inventory"/>
+		<menu_item_call label="Objekt wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/>
+		<menu_item_separator label="-----------" name="separator6"/>
+		<menu_item_call label="Skriptwarnung/Fehlerfenster anzeigen" name="Show Script Warning/Error Window"/>
+		<menu label="Skripte in Auswahl neu kompilieren" name="Recompile Scripts in Selection">
+			<menu_item_call label="Mono" name="Mono"/>
+			<menu_item_call label="LSL" name="LSL"/>
 		</menu>
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects" />
-		<menu_item_check label="Nur bewegliche Objekte auswählen" name="Select Only Movable Objects" />
-		<menu_item_check label="Nach Umgebung auswählen" name="Select By Surrounding" />
-		<menu_item_check label="Ausgeblendete Auswahl anzeigen" name="Show Hidden Selection" />
-		<menu_item_check label="Lichtradius für Auswahl anzeigen"
-		     name="Show Light Radius for Selection" />
-		<menu_item_check label="Auswahlstrahl anzeigen" name="Show Selection Beam" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_check label="An Raster ausrichten" name="Snap to Grid" />
-		<menu_item_call label="Objekt-XY an Raster ausrichten" name="Snap Object XY to Grid" />
-		<menu_item_call label="Auswahl für Raster verwenden" name="Use Selection for Grid" />
-		<menu_item_call label="Rasteroptionen..." name="Grid Options..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_check label="Verknüpfte Teile bearbeiten" name="Edit Linked Parts" />
-		<menu_item_call label="Verknüpfung" name="Link" />
-		<menu_item_call label="Verknüpfung aufheben" name="Unlink" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="Fokus auf Auswahl" name="Focus on Selection" />
-		<menu_item_call label="Auf Auswahl zoomen" name="Zoom to Selection" />
-		<menu_item_call label="Objekt kaufen" name="Menu Object Take" />
-		<menu_item_call label="Kopie nehmen/machen" name="Take Copy" />
-		<menu_item_call label="Objekt wieder im Inventar speichern"
-		     name="Save Object Back to My Inventory" />
-		<menu_item_call label="Objekt wieder in Objektinhalt speichern"
-		     name="Save Object Back to Object Contents" />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="Skriptwarnung/Fehlerfenster anzeigen"
-		     name="Show Script Warning/Error Window" />
-		<menu_item_call label="Skripte in Auswahl neu kompilieren"
-		     name="Recompile Scripts in Selection">
-			<menu_item_call label="Mono" name="Mono" />
-			<menu_item_call label="LSL" name="LSL" />
-		</menu_item_call>
-		<menu_item_call label="Skripte in Auswahl zurücksetzen" name="Reset Scripts in Selection" />
-		<menu_item_call label="Skripte in Auswahl so einstellen, dass sie ausgeführt werden"
-		     name="Set Scripts to Running in Selection" />
-		<menu_item_call label="Skripte in Auswahl so einstellen, dass sie nicht ausgeführt werden"
-		     name="Set Scripts to Not Running in Selection" />
+		<menu_item_call label="Skripte in Auswahl zurücksetzen" name="Reset Scripts in Selection"/>
+		<menu_item_call label="Skripte in Auswahl so einstellen, dass sie ausgeführt werden" name="Set Scripts to Running in Selection"/>
+		<menu_item_call label="Skripte in Auswahl so einstellen, dass sie nicht ausgeführt werden" name="Set Scripts to Not Running in Selection"/>
 	</menu>
 	<menu label="Hilfe" name="Help">
-		<menu_item_call label="Hilfe zu Second Life" name="Second Life Help" />
-		<menu_item_call label="In-Welt-Hilfe" name="In-World Help" />
-		<menu_item_call label="Weitere Hilfe" name="Additional Help" />
-		<menu_item_call label="Tutorial" name="Tutorial" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_call label="Offizielles Linden-Blog..." name="Official Linden Blog..." />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_call label="Scripting-Anleitung..." name="Scripting Guide..." />
-		<menu_item_call label="Scripting-Portal..." name="Scripting Portal..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="Meldung des Tages..." name="Message of the Day..." />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_call label="Missbrauch melden..." name="Report Abuse..." />
-		<menu_item_call label="Rempler, Stöße und Schläge..." name="Bumps, Pushes &amp;amp; Hits..." />
-		<menu_item_call label="Lag-Anzeige" name="Lag Meter" />
-		<menu_item_separator label=" -----------" name="separator7" />
-		<menu_item_separator label="-----------" name="separator5" />
+		<menu_item_call label="Hilfe zu Second Life" name="Second Life Help"/>
+		<menu_item_call label="Tutorial" name="Tutorial"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_call label="Offizielles Linden-Blog..." name="Official Linden Blog..."/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_call label="Scripting-Portal..." name="Scripting Portal..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="Missbrauch melden..." name="Report Abuse..."/>
+		<menu_item_call label="Rempler, Stöße und Schläge..." name="Bumps, Pushes &amp;amp; Hits..."/>
+		<menu_item_call label="Lag-Anzeige" name="Lag Meter"/>
+		<menu_item_separator label="-----------" name="separator7"/>
 		<menu label="Fehlermeldungen" name="Bug Reporting">
-			<menu_item_call label="Allgemeiner Probleme-Tracker..." name="Public Issue Tracker..." />
-			<menu_item_call label="Hilfe zum Allgemeinen Probleme-Tracker..."
-			     name="Publc Issue Tracker Help..." />
-			<menu_item_separator label=" -----------" name="separator7" />
-			<menu_item_call label="Fehlermeldungs-1x1..." name="Bug Reporing 101..." />
-			<menu_item_call label="Sicherheitsfragen..." name="Security Issues..." />
-			<menu_item_call label="QA-Wiki..." name="QA Wiki..." />
-			<menu_item_separator label=" -----------" name="separator9" />
-			<menu_item_call label="Fehler melden..." name="Report Bug..." />
+			<menu_item_call label="Allgemeiner Probleme-Tracker..." name="Public Issue Tracker..."/>
+			<menu_item_call label="Hilfe zum Allgemeinen Probleme-Tracker..." name="Publc Issue Tracker Help..."/>
+			<menu_item_separator label="-----------" name="separator7"/>
+			<menu_item_call label="Fehlermeldungs-1x1..." name="Bug Reporing 101..."/>
+			<menu_item_call label="Sicherheitsfragen..." name="Security Issues..."/>
+			<menu_item_call label="QA-Wiki..." name="QA Wiki..."/>
+			<menu_item_separator label="-----------" name="separator9"/>
+			<menu_item_call label="Fehler melden..." name="Report Bug..."/>
 		</menu>
-		<menu_item_call label="Versionshinweise..." name="Release Notes..." />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="Über Second Life..." name="About Second Life..." />
+		<menu_item_call label="Über Second Life..." name="About Second Life..."/>
 	</menu>
 </menu_bar>
diff --git a/indra/newview/skins/default/xui/de/need_to_long.xml b/indra/newview/skins/default/xui/de/need_to_long.xml
deleted file mode 100644
index 581dd2b..0000000
--- a/indra/newview/skins/default/xui/de/need_to_long.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-
-<strings>
-<string><a_file>alerts.xml</a_file>
-<b_path>//HelpReportAbuseContainsCopyright/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Dear Resident,
- 
-Reports about copyright infringement can only be submitted
-as described at http://secondlife.com/corporate/dmca.php.
-
-Reports concerning copyright infringement will automatically
-be discarded if they are submitted through the &apos;Abuse Report&apos;
-feature. If your report does not relate to copyright infringement,
-you may close this window and finish submitting your report.
- 
-Thank you,
- 
-Linden Lab
-		</d_old>
-<e_new>
-			Dear Resident,
-
-If you are reporting intellectual property infringement, please make sure you are reporting it correctly:
-
-(1) The Abuse Process. You may submit an abuse report if you believe a Resident is exploiting the Second Life permissions system, for example, by using CopyBot or similar copying tools, to infringe intellectual property rights. The Abuse Team investigates and issues appropriate disciplinary action for behavior that violates the Second Life Community Standards or Terms of Service. However, the Abuse Team does not handle and will not respond to requests to remove content from the Second Life world.
-
-(2) The DMCA or Content Removal Process. To request removal of content from Second Life, you must submit a valid notification of infringement as provided in our DMCA Policy at http://secondlife.com/corporate/dmca.php.
-
-If you still wish to continue with the abuse process, please close this window and finish submitting your report.
-
-Thank you,
-
-Linden Lab</e_new>
-<f_translation>
-			Sehr geehrte(r) Einwohner(in),
-
-achten Sie bei der Meldung einer Urheberrechtsverletzung darauf, dass Sie dabei korrekt vorgehen:
-
-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 verwandte 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. Die DMCA oder Inhaltsentfernungs-Vorgehensweise. 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 jetzt mit der Missbrauchmeldung fortfahren möchten, schließen Sie bitte dieses Fenster und senden Sie Ihren Bericht ein.
-
-Vielen Dank,
-
-Linden Lab</f_translation>
-<f_old_trans>
-			Sehr geehrte(r) Einwohner(in),
- 
-Meldungen über Urheberrechtsverletzungen können nur auf
-http://secondlife.com/corporate/dmca.php eingereicht werden.
-
-Meldungen über Urheberrechtsverletzungen, die über
-&apos;Missbrauch melden&apos; eingereicht wurden, werden automatisch
-gelöscht. Wenn Sie keine Urheberrechtsverletzung melden möchten,
-können Sie dieses Fenster schließen und mit dem Einreichen Ihrer Meldung fortfahren.
- 
-Vielen Dank,
- 
-Linden Lab
-		</f_old_trans>
-</string><string><a_file>floater_about.xml</a_file>
-<b_path>/floater_about/credits_editor</b_path>
-<c_attribute></c_attribute>
-<d_old>
-  Second Life is brought to you by Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Tofu, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa, Enus, Kraft, Naveen, Simon, Q, Ronp, Laurap, Ram, KyleJM, Marty, Kend, Daveh, Prospero, Melissa, Nat, Hamilton, Green, Seraph, Ekim, Miz, Jimmy, Kosmo, Rome, Doris, JT, Benoc, Whump, Mango, Trinity, Patch, TJ, Christy, Bao, Joohwan, Kate, Oreh, Angela, Johan, Cheah, Lan, Matias, Brandy, Cogsworth, Aleks,  Mitchell, Space, Einstein, Bambers, Colton, Malbers, Maggie, Umesh, Santosh, Rose, Stash, Rothman, Winnie, Stella, Niall and many others.
-
-  Thank you to the following residents for helping to ensure that this is the best version yet: aaron23 decuir, Abelv Vollmar, Abyssin Otoro, ActingIll Igaly, Adamas Carter, Addy Broome, Adelia Menges, Alexandra Rucker, Alexandrea Fride, Alissa Sabre, Alyx Jonson, Ann Otoole, Anton Fargis, Aradia Dielli, Araina jewell, Arcane Clawtooth, arcangelo vantelli, Are Sperber, Argent Stonecutter, arkady yost, Ashcroft Burnham, Ashen Arida, Auron Forcella, Azadine Umarov, Azildin Furst, Balp Allen, Balpien Hammerer, Barney Boomslang, Barrett Slade, becky pippen, Beeflin Grut, Beer Dailey, Behemoth Greenwood, bigmanu greene, bitova loon, Bonca Chikuwa, Bonnie Bechir, Brandon Catteneo, buttonpusher jones, Carina Raymaker, Ceera Murakami, Celierra Darling, ChatNoir Moonsoo, Cheetah Hammerer, chet neurocam, Cinthya Loveless, Cold Spitteler, Coral Quinnell, Crash Pointe, CrazyTB Oh, Creem Pye, Crom Chaffe, ctrl althouse, dade carver, Dael Ra, dakota schwade, Dale Innis, Damian McLeod, Danger Lytton, danielluh ashton, DanOfWA Flanagan, Davec Horsforth, Davidius Morigi, davie zinner, Day Oh, DBDigital Epsilon, Deany Fall, deBruce Munro, Decaf Coffey, Dedric Mauriac, Deeso Saeed, Dekka Raymaker, dexter eberhart, Dildo Spitz, Dizzy Banjo, djcabello klaar, Dnali Anabuki, Domchi Underwood, Doran Zemlja, Drew Dwi, Duckless Vandyke, Duncan Stenvaag, Dylan Rickenbacker, dzogchen Moody, Dzonatas Sol, Eddy Stryker, Edward Griffith, Edward Pearse, ein duesenburg, Elle Pollack, Elle74 Zaftig, Emileigh Starbrook, Emma Nowhere, ener bing, Erdrick Balbozar, eric domela, Evangeline Biedermann, Excalibur Longstaff, Fake Fitzgerald, Feldspar Millgrove, Feynt Mistral, Fluf Fredriksson, Forbid Utorid, Fortyniner Beck, Francesco Despres, Francisco Koolhoven, Franta Burt, Fury Rosewood, garde Burrel, Garmin Kawaguichi, Gavin Ichigo, Gellan Glenelg, Genie Demina, Gennifer Meredith, Gigs Taggart, Goldie Katsu, Gwyneth Llewelyn, Haravikk Mistral, Harleen Gretzky, Haruki Watanabe, Heather Manatiso, Henri Beauchamp, Honey Fairweather, Hypatia Callisto, Ice Brodie, icktoofay Kamachi, IntLibber Brautigan, Janise Dreamscape, Jay Shinobu, Jenni Ryba, Jeremy Ondricek, JetZep Zabelin, Jims Smythe, Jini Hammerer, Jopy Weber, JustOneMore Loon, Kaluura Boa, Kara Markova, Kevin Susenko, Khyra Ares, Kii Lilliehook, Kitty Barnett, Kris Kuttelwascher, Lanita Wingtips, Laura18 Streeter, Lee Ludd, Lettrius Jewell, Liberty Tesla, LilyAnna Carter, Lindal Kidd, Lisa Lowe, Lisa McConnell, Lola Machin, luca peck, Lupus Clawtooth, M1sha Dallin, Macsima Dagostino, Mana Janus, Mani Canning, Manjusri Binder, marceledward edman, march Korda, marchino villota, Marcus Llewellyn, MartinRJ Fayray, Matthew Dowd, Max Kleiber, mazzy fastback, McCabe Maxsted, Mckailen Kohnke, Meghan Dench, Melvin Starbrook, Mercia Mcmahon, Miakoda Carnell, Michelle2 Zenovka, Michi Lumin, mick parnall, Milla Michinaga, Millie Thompson, miranda Ashby, Mircea Lobo, MIssSara Beck, mouse mimistrobell, Myria Boa, Nanci Barthelmess, Nargus Asturias, Natalya Debevec, Nedrae Messmer, Nexeus Fatale, Niky Zenovka, Nimrod Szondi, Ninane Yoshikawa, Noch Tripsa, nokithecat writer, Nyko Merlin, Onyx Halberd, oryx tempel, Osprey Therian, Pac Hyun, Panagea McMillan, Patrick Ferrentino, PattehPh0x Katsu, ponk bing, Poppy Linden, Prajna Vella, Precious Rhiano, Prokofy Neva, Randall Lovenkraft, Rascal Ratelle, Raydon Writer, Rhaorth Antonelli, Rock Hayek, Ron Crimson, Ron Khondji, Ronald Richez, Rui Clary, Ruud Lathrop, Sakkano Imako, Sam Reinard, Sascha Vandyke, Scrippy Scofield, Sean18 McCarey, Sedona Mills, Sekonda Huet, Seraph Nephilim, Sergei Milos, Shadowquine Maltz, shai khalifa, sheilah flatley, Sheri Underwood, Shuggy Husky, Sierra Janus, Sigma Avro, Simil Miles, simon kline, Simon Nolan, Sindy Tsure, Sparks Keynes, Squirrel Wood, Stahi Columbia, StarSong Bright, Summer Seale, Sunn Thunders, Susan Koltai, Syler Zhora, Synack Fitzgerald, Tayra Dagostino, Tee Cramer, Teravus Ousley, Thomas Shikami, Tia Araw, Tillie Ariantho, Topher Brooks, Torley Linden, Twosteppin Jewell, tx Oh, urantia jewell, vaguegirl Petty, VeC Merlin, venus petrov, vv33d Beck, vynka dean, zann canto, zeebster colasanti, Zi Ree, Zion Tristan, Zorin Frobozz, Zyzzy Zarf
-
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel at 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 at cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
-
-  All rights reserved.  See licenses.txt for details.
-
-  Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-
-
-  Happiness is a warm puppy. -- Charles M. Schulz</d_old>
-<e_new>
-  Second Life is brought to you by Philip, Tessa, Andrew, Cory, Ben, Bunny, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Hunter, Ian, Jeff, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, BillTodd, Ryan, Zach, Sarah, Nova, Otakon, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, DanceStar, Jeska, Hungry, Torley, Kona, Callum, Charity, Ventrella, Jack, Uncle, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Monroe, David, Tess, Lizzie, Patsy, Pony, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, 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, 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, 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, James, Katie, Dawn, Katt, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, 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 and many others.
-
-  Thank you to the following residents for helping to ensure that this is the best version yet: aaron23 decuir, Abra Miles, absolute balderdash, adelle fitzgerald, Aeron Kohime, Aki Shichiroji, Alger Meads, Alissa Sabre, AlwaysIcey Mapholisto, Arawn Spitteler, Aren Mandala, Arianna Wrigglesworth, Bagushii Kohime, Balpien Hammerer, Blinking2342 Blinker, byakuya runo, Capucchy Streeter, Chandra Jun, Coyote Pace, Crusher Soderstrom, Cummere Mayo, cyberrosa Rossini, Dael Ra, danana dodonpa, Darek Deluca, Davec Horsforth, django yifu, draco crane, Dre Dagostino, Ephyu Reino, etan quan, Fenrix Murakami, Fledhyris Proudhon, Fred Wardhani, Frederich Courier, garth fairchang, Gellan Glenelg, Geraldine Giha, GOLAN Eilde, gonzo joubert, Hachiro Yokosuka, Hampton Hax, harleywood guru, Hevenz Vansant, imnotgoing sideways, Jaden Giles, Jeanette Janus, Karl Dorance, keaton Akina, Khashai Steinbeck, KiPSOFT Tuqiri, kirstenlee Cinquetti, Kitty Barnett, Laurent Vesta, Lazure Ryba, Lima Vesperia, Linzi Bingyi, Lisa Lowe, LuDon Ninetails, Mark Rosenbaum, McCabe Maxsted, Michi Lumin, Midi Aeon, ml0rtd kit, Mo Eriksen, Morice Flanagan, Mysterion Aeon, Nad Gough, norgan torok, Pygar Bu, Qie Niangao, rachel corleone, Rado Arado, roberto salubrius, Royer Pessoa, samia bechir, Sasha Nurmi, Sean Heying, Selkit Diller, Shadow Pidgeon, simon kline, Smokie Ember, Soap Clawtooth, Strife Onizuka, Tal Chernov, Talan Hyun, tangletwigs fairymeadow, Tanya Spinotti, Tayra Dagostino, Teebone Aeon, Theremes Langdon, Thraxis Epsilon, tucor Capalini, Vasko Hawker, VenusMari Zapedzki, Vex Streeter, Viktoria Dovgal, Vincent Nacon, Viridian Exonar, Vivienne Schell, WarKirby Magojiro, Wilton Lundquist, Yukinoroh Kamachi, Zyzzy Zarf
-
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel at 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 at cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
-
-  All rights reserved.  See licenses.txt for details.
-
-  Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
-
-
-  What happens to a dream deferred? --Langston Hughes</e_new>
-<f_translation>
-Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, Ben, Bunny, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Hunter, Ian, Jeff, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, BillTodd, Ryan, Zach, Sarah, Nova, Otakon, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, DanceStar, Jeska, Hungry, Torley, Kona, Callum, Charity, Ventrella, Jack, Uncle, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Monroe, David, Tess, Lizzie, Patsy, Pony, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, 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, 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, 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, James, Katie, Dawn, Katt, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, 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 und vielen anderen.
-
-Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen:aaron23 decuir, Abra Miles, absolute balderdash, adelle fitzgerald, Aeron Kohime, Aki Shichiroji, Alger Meads, Alissa Sabre, AlwaysIcey Mapholisto, Arawn Spitteler, Aren Mandala, Arianna Wrigglesworth, Bagushii Kohime, Balpien Hammerer, Blinking2342 Blinker, byakuya runo, Capucchy Streeter, Chandra Jun, Coyote Pace, Crusher Soderstrom, Cummere Mayo, cyberrosa Rossini, Dael Ra, danana dodonpa, Darek Deluca, Davec Horsforth, django yifu, draco crane, Dre Dagostino, Ephyu Reino, etan quan, Fenrix Murakami, Fledhyris Proudhon, Fred Wardhani, Frederich Courier, garth fairchang, Gellan Glenelg, Geraldine Giha, GOLAN Eilde, gonzo joubert, Hachiro Yokosuka, Hampton Hax, harleywood guru, Hevenz Vansant, imnotgoing sideways, Jaden Giles, Jeanette Janus, Karl Dorance, keaton Akina, Khashai Steinbeck, KiPSOFT Tuqiri, kirstenlee Cinquetti, Kitty Barnett, Laurent Vesta, Lazure Ryba, Lima Vesperia, Linzi Bingyi, Lisa Lowe, LuDon Ninetails, Mark Rosenbaum, McCabe Maxsted, Michi Lumin, Midi Aeon, ml0rtd kit, Mo Eriksen, Morice Flanagan, Mysterion Aeon, Nad Gough, norgan torok, Pygar Bu, Qie Niangao, rachel corleone, Rado Arado, roberto salubrius, Royer Pessoa, samia bechir, Sasha Nurmi, Sean Heying, Selkit Diller, Shadow Pidgeon, simon kline, Smokie Ember, Soap Clawtooth, Strife Onizuka, Tal Chernov, Talan Hyun, tangletwigs fairymeadow, Tanya Spinotti, Tayra Dagostino, Teebone Aeon, Theremes Langdon, Thraxis Epsilon, tucor Capalini, Vasko Hawker, VenusMari Zapedzki, Vex Streeter, Viktoria Dovgal, Vincent Nacon, Viridian Exonar, Vivienne Schell, WarKirby Magojiro, Wilton Lundquist, Yukinoroh Kamachi, Zyzzy Zarf
-
-3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-APR Copyright (C) 2000-2004 The Apache Software Foundation
-cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel at 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 at cryptsoft.com)
-xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
-
-Alle Rechte vorbehalten.Details siehe licenses.txt.
-
-Voice-Chat-Audiocoding:Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C)
-
-
-Was geschieht, wenn Träume aufgeschoben werden?- Langston Hughes</f_translation>
-<f_old_trans>
-		Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, Ben, Bunny, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Hunter, Ian, Jeff, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, BillTodd, Ryan, Zach, Sarah, Nova, Otakon, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, DanceStar, Jeska, Hungry, Torley, Kona, Callum, Charity, Ventrella, Jack, Uncle, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Monroe, David, Tess, Lizzie, Patsy, Pony, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, 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, 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, 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, James, Katie, Dawn, Katt, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, 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 und vielen anderen.
-
-  Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: aaron23 decuir, Abra Miles, absolute balderdash, adelle fitzgerald, Aeron Kohime, Aki Shichiroji, Alger Meads, Alissa Sabre, AlwaysIcey Mapholisto, Arawn Spitteler, Aren Mandala, Arianna Wrigglesworth, Bagushii Kohime, Balpien Hammerer, Blinking2342 Blinker, byakuya runo, Capucchy Streeter, Chandra Jun, Coyote Pace, Crusher Soderstrom, Cummere Mayo, cyberrosa Rossini, Dael Ra, danana dodonpa, Darek Deluca, Davec Horsforth, django yifu, draco crane, Dre Dagostino, Ephyu Reino, etan quan, Fenrix Murakami, Fledhyris Proudhon, Fred Wardhani, Frederich Courier, garth fairchang, Gellan Glenelg, Geraldine Giha, GOLAN Eilde, gonzo joubert, Hachiro Yokosuka, Hampton Hax, harleywood guru, Hevenz Vansant, imnotgoing sideways, Jaden Giles, Jeanette Janus, Karl Dorance, keaton Akina, Khashai Steinbeck, KiPSOFT Tuqiri, kirstenlee Cinquetti, Kitty Barnett, Laurent Vesta, Lazure Ryba, Lima Vesperia, Linzi Bingyi, Lisa Lowe, LuDon Ninetails, Mark Rosenbaum, McCabe Maxsted, Michi Lumin, Midi Aeon, ml0rtd kit, Mo Eriksen, Morice Flanagan, Mysterion Aeon, Nad Gough, norgan torok, Pygar Bu, Qie Niangao, rachel corleone, Rado Arado, roberto salubrius, Royer Pessoa, samia bechir, Sasha Nurmi, Sean Heying, Selkit Diller, Shadow Pidgeon, simon kline, Smokie Ember, Soap Clawtooth, Strife Onizuka, Tal Chernov, Talan Hyun, tangletwigs fairymeadow, Tanya Spinotti, Tayra Dagostino, Teebone Aeon, Theremes Langdon, Thraxis Epsilon, tucor Capalini, Vasko Hawker, VenusMari Zapedzki, Vex Streeter, Viktoria Dovgal, Vincent Nacon, Viridian Exonar, Vivienne Schell, WarKirby Magojiro, Wilton Lundquist, Yukinoroh Kamachi, Zyzzy Zarf
-
-  3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
-  APR Copyright (C) 2000-2004 The Apache Software Foundation
-  cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel at 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 at cryptsoft.com)
-  xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-  zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler.
-
-  Alle Rechte vorbehalten.  Details siehe licenses.txt.
-
-  Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf. G.722.1 Anhang C)
-
-
-  What happens to a dream deferred? --Langston Hughes
-	</f_old_trans>
-</string>
-</strings>
diff --git a/indra/newview/skins/default/xui/de/need_to_translate.xml b/indra/newview/skins/default/xui/de/need_to_translate.xml
deleted file mode 100644
index b6a15da..0000000
--- a/indra/newview/skins/default/xui/de/need_to_translate.xml
+++ /dev/null
@@ -1,1233 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-
-<strings>
-<string><a_file>alerts.xml</a_file>
-<b_path>//AddFriend/editline</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Would you be my friend?
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Wollen wir Freunde sein?
-		</f_translation>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//EstateObjectReturn/message</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Are you sure you want to return objects owned by
-[USER_NAME] ?
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Möchten Sie wirklich alle Objekte zurückgeben, die [USER_NAME] gehören?
-
-		</f_translation>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//EstateObjectReturn/Return</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			OK
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			OK
-		</f_translation>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//EstateObjectReturn/Cancel</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Cancel
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Abbrechen
-		</f_translation>
-</string><string><a_file>floater_about_land.xml</a_file>
-<b_path>/floaterland/landtab/land_general_panel/no_selection_text</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			No parcel selected.
-Go to World menu &gt; About Land or select another parcel to show its details.
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Keine Parzelle ausgewählt.
-Öffnen Sie &quot;Welt&quot; &gt; &quot;Land-Info&quot; oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen.
-			</f_translation>
-</string><string><a_file>floater_instant_message.xml</a_file>
-<b_path>/im_floater/inventory_item_offered</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-		Inventory item offered
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-		Inventarobjekt angeboten
-	</f_translation>
-</string><string><a_file>floater_live_lsleditor.xml</a_file>
-<b_path>/script ed float/mono</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Mono</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Mono</f_translation>
-<f_old_trans></f_old_trans>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak</b_path>
-<c_attribute>title</c_attribute>
-<d_old></d_old>
-<e_new>Memory Leaking Simulation</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Speicherverlust-Simulation</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/leak_speed</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Leaking Speed (bytes per frame):</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Verlustgeschwindigkeit (Bytes pro Frame):</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/max_leak</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Max Leaked Memory (MB):</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Max. Speicherverlust (MB):</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/total_leaked_label</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-		Current leaked memory: [SIZE] KB
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-		Aktueller Speicherverlust:[SIZE] KB
-	</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/note_label_1</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-		[NOTE1]
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-		[NOTE1]
-	</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/note_label_2</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-		[NOTE2]
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-		[NOTE2]
-	</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/start_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Start</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Start</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/stop_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Stop</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Stopp</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/release_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Release</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Freigeben</f_translation>
-</string><string><a_file>floater_mem_leaking.xml</a_file>
-<b_path>/MemLeak/close_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Close</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Schließen</f_translation>
-</string><string><a_file>floater_postcard.xml</a_file>
-<b_path>/Postcard/upload_message</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-	 &quot;Sending...&quot;
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-	 &quot;Wird gesendet...&quot;
-	</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Select_category</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Select category
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Kategorie auswählen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Age__Age_play</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Age &gt; Age play
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Alter&gt; Age-Play
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Age__Adult_resident_on_Teen_Second_Life</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Age &gt; Adult resident on Teen Second Life
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Alter&gt; Erwachsener Einwohner in Teen Second Life
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Age__Underage_resident_on_Adult_Second_Life</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Age &gt; Underage resident on Adult Second Life
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Alter &gt; Minderjähriger Einwohner in Adult Second Life
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Assault__Combat_sandbox___unsafe_area</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Assault &gt; Combat sandbox / unsafe area
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Angriff&gt; Kampf-Sandbox / unsichere Region
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Assault__Safe_area</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Assault &gt; Safe area
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Angriff&gt; Sichere Region
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Assault__Weapons_testing_sandbox</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Assault &gt; Weapons testing sandbox
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Angriff &gt; Sandbox für Waffentest
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Copyright_or_intellectual_property_violation</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Copyright or intellectual property violation
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Urheberrechtsverletzung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Commerce__Failure_to_deliver_product_or_service</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Commerce &gt; Failure to deliver product or service
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Handel &gt; Produkt nicht geliefer oder Dienstleistung nicht erbracht
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disclosure__First_Life_information</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disclosure &gt; First life information
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Offenlegung &gt; Private Benutzerdaten
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disclosure__Remotely_monitoring chat</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disclosure &gt; Remotely monitoring chat
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Offenlegung &gt; Abhören eines Chats aus der Ferne
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disclosure__Second_Life_information_chat_IMs</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disclosure &gt; Second Life information/chat/IMs
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Offenlegung &gt; Second Life-Informationen/Chat/IMs
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disturbing_the_peace__Unfair_use_of_region_resources</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disturbing the peace &gt; Unfair use of region resources
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Ruhestörung &gt; Unfaire Nutzung von Regionsressourcen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disturbing_the_peace__Excessive_scripted_objects</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disturbing the peace &gt; Excessive scripted objects
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Ruhestörung &gt; Exzessive Nutzung geskripteter Objekte
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disturbing_the_peace__Object_littering</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disturbing the peace &gt; Object littering
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Ruhestörung &gt; Wildes Erzeugen von Objekten
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disturbing_the_peace__Repetitive_spam</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disturbing the peace &gt; Repetitive spam
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Ruhestörung &gt; Ständige Spam-Wiederholung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Disturbing_the_peace__Unwanted_advert_spam</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Disturbing the peace &gt; Unwanted advert spam
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Ruhestörung &gt; Unerwünschte Spam-Werbung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Fraud__L$</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Fraud &gt; L$
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Betrug &gt; L$
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Fraud__Land</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Fraud &gt; Land
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Betrug&gt; Land
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Fraud__Pyramid_scheme_or_chain_letter</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Fraud &gt; Pyramid scheme or chain letter
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Betrug &gt; Schneeballsystem oder Kettenbrief
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Fraud__US$</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Fraud &gt; US$
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Betrug &gt; US$
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Harassment__Advert_farms___visual_spam</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Harassment &gt; Advert farms / visual spam
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Belästigung &gt; Werbefarmen / visueller Spam
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Harassment__Defaming_individuals_or_groups</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Harassment &gt; Defaming individuals or groups
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Belästigung &gt; Diffamieren von Einzelpersonen/Gruppen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Harassment__Impeding_movement</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Harassment &gt; Impeding movement
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Belästigung &gt; Bewegungseinschränkung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Harassment__Sexual_harassment</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Harassment &gt; Sexual harassment
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Belästigung &gt; Sexuelle Belästigung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Harassment__Solicting_inciting_others_to_violate_ToS</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Harassment &gt; Solicting/inciting others to violate ToS
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Belästigung &gt; Anstiften Dritter zur Missachtung der Nutzungsbedingungen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Harassment__Verbal_abuse</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Harassment &gt; Verbal abuse
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Belästigung &gt; Beschimpfung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Indecency__Broadly_offensive_content_or_conduct</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Indecency &gt; Broadly offensive content or conduct
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Unanständigkeit &gt; Anstößige Inhalte oder Handlungen in der Öffentlichkeit
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Indecency__Broadly_visible_mature_content</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Indecency &gt; Broadly visible mature content
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Unanständigkeit &gt; Nicht jugendfreier Inhalt in der Öffentlichkeit
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Indecency__Inappropriate_avatar_name</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Indecency &gt; Inappropriate avatar name
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Unanständigkeit &gt; Anstößiger Avatarname
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Indecency__Mature_content_in_PG_region</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Indecency &gt; Mature content in PG region
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Unanständigkeit &gt; Nicht jugendfreier Inhalt in &quot;Jugendfrei&quot;-Region
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Land__Abuse_of_sandbox_resources</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Land &gt; Abuse of sandbox resources
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Land &gt; Missbrauch der Sandbox-Ressourcen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Land__Encroachment__Objects_textures</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Land &gt; Encroachment &gt; Objects/textures
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Land &gt; Unbefugte Nutzung &gt; Objekte/Texturen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Land__Encroachment__Particles</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Land &gt; Encroachment &gt; Particles
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Land &gt; Unbefugte Nutzung &gt; Partikel
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Land__Encroachment__Trees_plants</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Land &gt; Encroachment &gt; Trees/plants
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Trademark_violation</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Trademark violation
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Markenrechtsverletzung
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Wagering_gambling</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-Wagering/gambling
-</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Wetten/Glücksspiel
-</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/omit_abuser_name</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Don&apos;t know abuser&apos;s name</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Name des Täters ist nicht bekannt</f_translation>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/omit_abuser_name</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Check this if you are unable to provide the abuser&apos;s name</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Wählen Sie diese Option, wenn Ihnen der Name des Täters unbekannt ist</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox</b_path>
-<c_attribute>title</c_attribute>
-<d_old></d_old>
-<e_new></e_new>
-<f_old_trans></f_old_trans>
-<f_translation></f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//chat_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new></e_new>
-<f_old_trans></f_old_trans>
-<f_translation></f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//chat_btn</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Show Chat Bar. (Enter)</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Chat-Leiste anzeigen.(Eingabe)</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//communicate_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Communicate</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Unterhalten</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//communicate_btn</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Communicate with your Friends and Groups.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Unterhalten Sie sich mit Freunden und in Gruppen.</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//fly_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Fly</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Fliegen</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//fly_btn</b_path>
-<c_attribute>label_selected</c_attribute>
-<d_old></d_old>
-<e_new>Stop Flying</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Landen</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox//fly_btn</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Start flying. Use E/C or PgUp/PgDn to fly up and down.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Flug beginnen.Steigen/sinken mit E/C oder Bild hoch/Bild ab.</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_unfocused_floater/titlebar_focused</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Unfocused</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Nicht fokussiert</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_unfocused_floater/combo_box_1</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Combo Box</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Kombifeld</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_unfocused_floater/Chat History Editor</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Text</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Text</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/titlebar_focused</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Focused</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Fokussiert</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/chatterbox_tabs/test_1</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Focused</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Fokussiert</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/chatterbox_tabs/test_1/SliderTestName</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Slider</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Regler</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/chatterbox_tabs/test_1/check_box_test_1</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>True</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Wahr</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/chatterbox_tabs/test_1/check_box_test_2</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>False</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Unwahr</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/chatterbox_tabs/test_1/Chat History Editor</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Chat Text</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Chat-Text</f_translation>
-</string><string><a_file>floater_skin_preview_template.xml</a_file>
-<b_path>/floater_chatterbox/panel_focused_floater/chatterbox_tabs/test_2</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Unfocused</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Nicht fokussiert</f_translation>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/save_btn</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Save image to a file</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Bild als Datei speichern</f_translation>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/format_label</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-  Format
-  </e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-Format
-  </f_translation>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/local_format_combo</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Format</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Format</f_translation>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/local_format_combo/PNG</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			PNG
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			PNG
-		</f_translation>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/local_format_combo/JPEG</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			JPEG
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			JPEG
-		</f_translation>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/local_format_combo/BMP</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			BMP
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			BMP
-		</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Strength:</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-	          Strength:
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-	          Stärke:
-	</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/General/Cost</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-				Price:  L$
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-				Preis:L$
-			</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/General/Cost Default</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Price:           L$
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Preis:L$
-			</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/General/Cost Total</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Total Price:  L$
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Summe:L$
-			</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/General/Cost Per Unit</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Price Per:     L$
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Stückpreis:L$
-			</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/General/Cost Mixed</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Mixed Price
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Mischpreis
-			</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/General/Sale Mixed</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Mixed Sale
-			</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Mischverkauf
-			</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/Object/sculpt mirror control</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Mirror</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Spiegeln</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/Object/sculpt mirror control</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Flips sculpted prim along the X axis.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Geformtes Primitiv entlang der X-Achse spiegeln.</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/Object/sculpt invert control</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Inside-out</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Wenden</f_translation>
-</string><string><a_file>floater_tools.xml</a_file>
-<b_path>/toolbox floater/Object Info Tabs/Object/sculpt invert control</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Inverts the sculpted prims normals, making it appear inside-out.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Dreht die Normalen des geformten Primitivs von innen nach außen.</f_translation>
-</string><string><a_file>floater_top_objects.xml</a_file>
-<b_path>/top_objects/objects_list/time</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Time</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Uhrzeit</f_translation>
-</string><string><a_file>floater_tos.xml</a_file>
-<b_path>/modal container/agree_chk</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>I Agree to the Terms of Service</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Ich stimme den Nutzungsbedingungen zu</f_translation>
-</string><string><a_file>menu_viewer.xml</a_file>
-<b_path>/Main Menu/World/Release Keys</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Release Keys</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Tasten freigeben</f_translation>
-</string><string><a_file>menu_viewer.xml</a_file>
-<b_path>/Main Menu/Tools/Recompile Scripts in Selection/Mono</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Mono</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Mono</f_translation>
-</string><string><a_file>menu_viewer.xml</a_file>
-<b_path>/Main Menu/Tools/Recompile Scripts in Selection/LSL</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>LSL</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>LSL</f_translation>
-</string><string><a_file>mime_types.xml</a_file>
-<b_path>/default/&quot;application/smil&quot;/&quot;application/smil_label&quot;</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-		    Synchronized Multimedia Integration Language (SMIL)
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-		    Synchronized Multimedia Integration Language (SMIL)
-		</f_translation>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//OfferFriendshipNoMessage/message</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			[NAME] is offering friendship.
-
-(By default, you will be able to 
-see each other&apos;s online status.)
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			[NAME] bietet Ihnen die Freundschaft an.
-
-(Sie werden dadurch den gegenseitigen 
-Online-Status sehen können.)
-		</f_translation>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//OfferFriendshipNoMessage/Accept</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Accept
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Akzeptieren
-		</f_translation>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//OfferFriendshipNoMessage/Decline</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-			Decline
-		</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-			Ablehnen
-		</f_translation>
-</string><string><a_file>panel_login.xml</a_file>
-<b_path>/panel_login/create_new_account_text</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Create new account.
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Neues Konto erstellen.
-	</f_translation>
-</string><string><a_file>panel_preferences_chat.xml</a_file>
-<b_path>/chat/user</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>You</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Sie</f_translation>
-</string><string><a_file>panel_preferences_chat.xml</a_file>
-<b_path>/chat/agent</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Others</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Andere</f_translation>
-</string><string><a_file>panel_preferences_chat.xml</a_file>
-<b_path>/chat/play_typing_animation</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Play typing animation</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Tipp-Animation abspielen</f_translation>
-</string><string><a_file>panel_preferences_general.xml</a_file>
-<b_path>/general_panel/language_is_public</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Share language with objects</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Objekten Sprache mitteilen</f_translation>
-</string><string><a_file>panel_preferences_general.xml</a_file>
-<b_path>/general_panel/language_is_public</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>This lets in-world objects know your preferred language.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>In-Welt-Objekten wird Ihre bevorzugte Spracheinstellung mitgeteilt.</f_translation>
-</string><string><a_file>panel_preferences_graphics1.xml</a_file>
-<b_path>/Display panel/QualityPerformanceSelection</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new></e_new>
-<f_old_trans></f_old_trans>
-<f_translation></f_translation>
-</string><string><a_file>panel_preferences_im.xml</a_file>
-<b_path>/im/friends_online_notify_checkbox</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Show Online Friend Notifications</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Online-Freundbenachrichtigungen anzeigen</f_translation>
-</string><string><a_file>panel_preferences_popups.xml</a_file>
-<b_path>/popups/show_in_inventory</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Automatically show newly accepted objects in inventory</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Neue Objekte im Inventar automatisch anzeigen</f_translation>
-</string><string><a_file>panel_preferences_skins.xml</a_file>
-<b_path>/Skins panel/classic_preview</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new></e_new>
-<f_old_trans></f_old_trans>
-<f_translation></f_translation>
-</string><string><a_file>panel_preferences_skins.xml</a_file>
-<b_path>/Skins panel/silver_preview</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new></e_new>
-<f_old_trans></f_old_trans>
-<f_translation></f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/target_avatar_name</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-	  (none)
-    </e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-	  (keiner)
-    </f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_scripts</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Return only those objects with scripts</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Nur Objekte mit Skripten zurückgeben</f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_scripts</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Return only objects which have scripts.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Es werden nur die Objekte zurückgegeben, die über Skripte verfügen.</f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_other_land</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Return only those objects on someone else&apos;s land</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Nur Objekte auf dem Land eines anderen Einwohners zurückgeben</f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_other_land</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Return only objects which are on land belonging to someone else</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Es werden nur die Objekte zurückgegeben, die sich auf dem Land eines anderen Einwohners befinden</f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_estate_wide</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Return objects in every region of this estate</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Objekte in jeder Region dieses Grundstücks zurückgeben</f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_estate_wide</b_path>
-<c_attribute>tool_tip</c_attribute>
-<d_old></d_old>
-<e_new>Return objects in all of the regions that make up this estate</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Es werden die Objekte in allen Regionen dieses Grundstücks zurückgegeben</f_translation>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/return_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old></d_old>
-<e_new>Return</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Zurückgeben</f_translation>
-</string><string><a_file>panel_region_estate.xml</a_file>
-<b_path>/Estate/abuse_email_text</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>
-		Abuse email address:
-	</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>
-		E-Mail-Adresse für Missbrauchsmeldungen:
-	</f_translation>
-</string><string><a_file>panel_region_estate.xml</a_file>
-<b_path>/Estate/email_unsupported</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Feature unsupported</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Funktion nicht unterstützt</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat</b_path>
-<c_attribute>description</c_attribute>
-<d_old></d_old>
-<e_new>These Abilities include powers to allow or restrict access to group chat sessions and group voice chat.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Diese Fähigkeiten ermöglichen es, den Zugang zu Gruppen-Chat und Gruppen-Voice-Chat zu steuern.</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat/join group chat</b_path>
-<c_attribute>description</c_attribute>
-<d_old></d_old>
-<e_new>Join Group Chat</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Gruppen-Chat beitreten</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat/join group chat</b_path>
-<c_attribute>longdescription</c_attribute>
-<d_old></d_old>
-<e_new>Members in a Role with this Ability can join group chat sessions, for text and voice.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Chat und Gruppen-Voice-Chat beitreten.</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat/join voice chat</b_path>
-<c_attribute>description</c_attribute>
-<d_old></d_old>
-<e_new>Join Group Voice Chat</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Gruppen-Voice-Chat beitreten</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat/join voice chat</b_path>
-<c_attribute>longdescription</c_attribute>
-<d_old></d_old>
-<e_new>Members in a Role with this Ability can join group voice chat sessions.  NOTE: The Join Group Chat ability is required to access the voice chat session.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Voice-Chat beitreten.HINWEIS:Sie benötigen die Fähigkeit &apos;Gruppen-Chat beitreten&apos;, um Zugang zu dieser Voice-Chat-Sitzung zu erhalten.</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat/moderate group chat</b_path>
-<c_attribute>description</c_attribute>
-<d_old></d_old>
-<e_new>Moderate Group Chat</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Gruppen-Chat moderieren</f_translation>
-</string><string><a_file>role_actions.xml</a_file>
-<b_path>//Chat/moderate group chat</b_path>
-<c_attribute>longdescription</c_attribute>
-<d_old></d_old>
-<e_new>Members in a Role with this Ability can control access and participation in group voice and text chat sessions.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Mitglieder in einer Rolle mit dieser Fähigkeit können den Zugang zu und die Teilnahme an Gruppen-Chat- und Voice-Chat-Sitzungen steuern.</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//LoginInitializingMultimedia</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Initializing multimedia...</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Multimedia wird initialisiert...</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//AgentLostConnection</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>This region may be experiencing trouble.  Please check your connection to the Internet.</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung.</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//TooltipMustSingleDrop</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Only a single item can be dragged here</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Sie können nur ein einzelnes Objekt hierher ziehen</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//ReleaseNotes</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Release Notes</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Versionshinweise</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//texture_loading</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Loading...</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Wird geladen...</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//worldmap_offline</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>Offline</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Offline</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//whisper</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>whispers:</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Flüstert:</f_translation>
-</string><string><a_file>strings.xml</a_file>
-<b_path>//shout</b_path>
-<c_attribute></c_attribute>
-<d_old></d_old>
-<e_new>shouts:</e_new>
-<f_old_trans></f_old_trans>
-<f_translation>Ruft:</f_translation>
-</string>
-</strings>
diff --git a/indra/newview/skins/default/xui/de/need_to_update.xml b/indra/newview/skins/default/xui/de/need_to_update.xml
deleted file mode 100644
index 8bf3f74..0000000
--- a/indra/newview/skins/default/xui/de/need_to_update.xml
+++ /dev/null
@@ -1,625 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-
-<strings>
-<string><a_file>alerts.xml</a_file>
-<b_path>//ClickPublishHelpAvatar/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Selecting &quot;Show in Search&quot; will show:
-			- my profile in search results
-			- a link to my profile in public group pages
-		</d_old>
-<e_new>
-Selecting &quot;Show in Search&quot; will show:
-- my profile in search results
-- a link to my profile in public group pages
-		</e_new>
-<f_translation>
-&quot;In Suche anzeigen&quot; wird:
-- Ihr Profil in den Suchergebnissen anzeigen
-- einen Link auf Ihr Profil auf öffentlichen Gruppenseiten anzeigen
-		</f_translation>
-<f_old_trans>
-			In Suche anzeigen
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//ClickWebProfileHelpAvatar/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			If this resident has a web profile URL set then you can:
- * Click Load to load the page with the embedded web browser.
- * Click Open to view externally in your default web browser.
- 
-When viewing your profile you can enter any URL as your Web Profile.
-Residents can visit the URL you specify when they view your profile.
-		</d_old>
-<e_new>
-			If this resident has set a web profile URL then you can:
- * Click &quot;Load&quot; to load the page with the embedded web browser.
- * Click Load-&gt;&quot;Open in external browser&quot; to view externally.
- * Click Load-&gt;&quot;Home URL&quot; to return to 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 view your profile.
-		</e_new>
-<f_translation>
-			Wenn dieser Einwohner eine Webprofil-URL angegeben hat, können Sie:
-* Auf &apos;Laden&apos; klicken und die Seite im integrierten Browser anzuzeigen.
-* Auf Laden-&gt;&quot;In external Browser öffnen&quot; klicken um die Seite extern anzeigen zu lassen.
-* Auf Laden-&gt;&quot;Home-URL&quot; klicken um zum Webprofil des Benutzers zurückzukehren.
- 
-In Ihrem eigenen Profil können Sie jede beliebige URL als Ihr Webprofil eingeben und mit OK übernehmen.
-Wenn andere Einwohner Ihr Profil betrachten, können sie diese URL besuchen.
-		</f_translation>
-<f_old_trans>
-			Wenn dieser Einwohner einen Webprofil-URL angegeben hat, können Sie:
- * Auf &apos;Laden&apos; klicken und die Seite im integrierten Browser anzeigen.
- * Auf &apos;Öffnen&apos; klicken und die Seite im externen Browser anzeigen.
- 
-In Ihrem Profil können Sie jeden URL als Webprofil festlegen.
-Bei Anzeige ihres Profils kann jeder Einwohner diesen URL öffnen.
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//PromptMissingSubjMsg/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Send postcard with the default subject or message?
-		</d_old>
-<e_new>
-			Email snapshot with the default subject or message?
-		</e_new>
-<f_translation>
-			Foto mit Standardbetreff bzw. -nachricht als E-Mail versenden?
-		</f_translation>
-<f_old_trans>
-			Postkarte mit Standardbetreff bzw. -nachricht senden?
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//ErrorUploadingPostcard/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			There was a problem uploading a postcard due to the following reason: [REASON]
-		</d_old>
-<e_new>
-			There was a problem sending a snapshot due to the following reason: [REASON]
-		</e_new>
-<f_translation>
-			Ein Foto konnte aus folgendem Grund nicht gesendet werden: [REASON]
-		</f_translation>
-<f_old_trans>
-			Eine Postkarte konnte aus folgendem Grund nicht hochgeladen werden: [REASON]
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//MustHaveAccountToLogIn/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			You must have an account to connect to [SECOND_LIFE].
-Go to www.secondlife.com to create an account?
-		</d_old>
-<e_new>
-Oops! Something was left blank.
-You need to enter both the First and Last name of your avatar.
-
-You need an account to enter [SECOND_LIFE]. Would you like to create one now?
-</e_new>
-<f_translation>
-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?
-</f_translation>
-<f_old_trans>
-			Sie benötigen ein Konto, um sich in [SECOND_LIFE] anmelden zu können.
-Möchten Sie auf www.secondlife.com ein Konto anlegen?
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//MustHaveAccountToLogIn/OK</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			OK
-		</d_old>
-<e_new>
-			Create a new account
-		</e_new>
-<f_translation>
-			Neues Benutzerkonto anlegen
-		</f_translation>
-<f_old_trans>
-			OK
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//MustHaveAccountToLogIn/Cancel</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Cancel
-		</d_old>
-<e_new>
-			Try again
-		</e_new>
-<f_translation>
-			Erneut versuchen
-		</f_translation>
-<f_old_trans>
-			Abbrechen
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//ChangeSkin/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-      New skin will appear after you restart [SECOND_LIFE].
-    </d_old>
-<e_new>
-      The new skin will appear after you restart [SECOND_LIFE].
-    </e_new>
-<f_translation>
-Die neue Haut wird nach dem erneuten Start von [SECOND_LIFE] angezeigt.
-    </f_translation>
-<f_old_trans>
-			Die neue Benutzeroberfläche wird nach einem Neustart von [SECOND_LIFE] erscheinen.
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//CannotGiveCategory/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			You do not have permission to transfer
-			the selected folder.
-		</d_old>
-<e_new>
-			You do not have permission to transfer
-the selected folder.
-		</e_new>
-<f_translation>
-			Sie sind nicht berechtigt, den ausgewählten
-Ordner zu kopieren.
-		</f_translation>
-<f_old_trans>
-			Sie sind nicht berechtigt, die ausgewählten
-			Ordner zu kopieren.
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//CannotBuyLandNoRegion/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Unable to buy land:
-			Cannot find the region this land is in.
-		</d_old>
-<e_new>
-			Unable to buy land:
-Cannot find the region this land is in.
-		</e_new>
-<f_translation>
-			Land kann nicht gekauft werden:
-Kann die Region nicht finden, in der sich dieses Land befindet.
-		</f_translation>
-<f_old_trans>
-			Land kann nicht gekauft werden:
-			Die Region, in der sich dieses Land befindet, kann nicht gefunden werden.
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//YouHaveBeenLoggedOut/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			You have been logged out of [SECOND_LIFE]:
-[MESSAGE]
-
-Click Continue to look at existing IM and chat.
-You will not be able to perform any other operations.
-Click Quit to exit [SECOND_LIFE] immediately.
-		</d_old>
-<e_new>
-You have been logged out of [SECOND_LIFE]:
-            [MESSAGE]
-You can still look at existing IM and chat by clicking &apos;View IM &amp; Chat&apos;. Otherwise, click &apos;Quit&apos; to exit [SECOND_LIFE] immediately.
-    </e_new>
-<f_translation>
-Sie wurden von [SECOND_LIFE] abgemeldet:
-            [MESSAGE]
-Klicken Sie auf &apos;IM &amp; Chat anzeigen&apos;, um vorhandene Nachrichten und Chat weiterhin anzuzeigen. Klicken Sie andernfalls auf &apos;Beenden&apos;, um [SECOND_LIFE] sofort zu beenden.
-    </f_translation>
-<f_old_trans>
-			Sie wurden von [SECOND_LIFE] abgemeldet:
-[MESSAGE]
-
-Klicken Sie auf &apos;Weiter&apos;, um IM und Chat anzuzeigen.
-Andere Optionen sind nicht mehr möglich.
-Klicken Sie auf &apos;Beenden&apos;, um [SECOND_LIFE] zu schließen.
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//YouHaveBeenLoggedOut/Continue</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Continue
-		</d_old>
-<e_new>
-			View IM &amp; Chat
-		</e_new>
-<f_translation>
-			IM &amp; Chat anzeigen
-		</f_translation>
-<f_old_trans>
-			Weiter
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//AddFriend/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Friends can give permissions to 
-track each other on the map and 
-receive online status updates. 
-
-Offer friendship to [NAME]?
-		</d_old>
-<e_new>
-			Friends can give permissions to track each 
-other on the map and receive online status updates. 
-
-Offer friendship to [NAME]?
-		</e_new>
-<f_translation>
-			Freunde können sich gegenseitig die Berechtigung 
-erteilen, sich auf der Karte zu verfolgen und den jeweiligen Online-Status einzusehen. 
-
-[NAME] die Freundschaft anbieten?
-		</f_translation>
-<f_old_trans>
-			Freunde können einander die Erlaubnis erteilen, 
-sich gegenseitig auf der Karte verfolgen und 
-ihren Online-Status einsehen zu können. 
-
-[NAME] Freundschaft anbieten?
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//ConfirmClearCookies/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Are you sure you want to clear 
-your cookies?
-		</d_old>
-<e_new>
-			Are you sure you want to clear your cookies?
-		</e_new>
-<f_translation>
-			Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
-		</f_translation>
-<f_old_trans>
-			Möchten Sie Ihre Cookies 
-wirklich löschen?
-		</f_old_trans>
-</string><string><a_file>alerts.xml</a_file>
-<b_path>//Cannot_Purchase_an_Attachment/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Items may not be purchased while
-			they are part of an attachment.
-		</d_old>
-<e_new>
-			Items may not be purchased while
-they are part of an attachment.
-		</e_new>
-<f_translation>
-			Objekte können nicht gekauft werden,
-solange sie Teil eines Anhangs sind.
-		</f_translation>
-<f_old_trans>
-			Objekte können nicht gekauft werden,
-			wenn sie Teil eines Anhangs sind.
-		</f_old_trans>
-</string><string><a_file>floater_about_land.xml</a_file>
-<b_path>/floaterland/landtab/land_access_panel/estate_override</b_path>
-<c_attribute></c_attribute>
-<d_old>
-				One ore more of these options is set at the estate level
-			</d_old>
-<e_new>
-				One or more of these options is set at the estate level
-			</e_new>
-<f_translation>
-				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
-			</f_translation>
-<f_old_trans>
-				Eine oder mehrere dieser Optionen gelten auf Grundstücksebene
-			</f_old_trans>
-</string><string><a_file>floater_im.xml</a_file>
-<b_path>/im_floater/muted_message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-		[FIRST] [LAST] is muted.
-	</d_old>
-<e_new>
-		You have muted this resident. Sending a message will automatically unmute them.
-	</e_new>
-<f_translation>
-		Sie haben diesen Einwohner stummgeschaltet.Wenn Sie ihm eine Nachricht senden, wird die Stummschaltung automatisch aufgehoben.
-	</f_translation>
-<f_old_trans>
-		Einwohner ist stummgeschaltet.
-	</f_old_trans>
-</string><string><a_file>floater_postcard.xml</a_file>
-<b_path>/Postcard</b_path>
-<c_attribute>title</c_attribute>
-<d_old>Send Postcard</d_old>
-<e_new>Email Snapshot</e_new>
-<f_translation>Foto per E-Mail senden</f_translation>
-<f_old_trans>Postkarte senden</f_old_trans>
-</string><string><a_file>floater_postcard.xml</a_file>
-<b_path>/Postcard/fine_print</b_path>
-<c_attribute></c_attribute>
-<d_old>
-		If your postcard recipient joins SL, you&apos;ll get a referral bonus.
-	</d_old>
-<e_new>
-		If your recipient joins SL, you&apos;ll get a referral bonus.
-	</e_new>
-<f_translation>
-		Wenn sich der Empfänger bei SL anmeldet, erhalten Sie einen Empfehlungsbonus.
-	</f_translation>
-<f_old_trans>
-		Wenn sich der Empfänger Ihrer Postkarte bei SL anmeldet, erhalten Sie eine
-Prämie für Ihre Empfehlung.
-	</f_old_trans>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Intolerance</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Intolerance
-		</d_old>
-<e_new>
-Intolerance
-</e_new>
-<f_translation>
-Intoleranz
-</f_translation>
-<f_old_trans>
-			Intoleranz
-		</f_old_trans>
-</string><string><a_file>floater_report_abuse.xml</a_file>
-<b_path>/floater_report_abuse/category_combo/Other</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Other
-		</d_old>
-<e_new>
-Other
-</e_new>
-<f_translation>
-Sonstige
-</f_translation>
-<f_old_trans>
-			Sonstige
-		</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/type_label</b_path>
-<c_attribute></c_attribute>
-<d_old>
-		What would you like to do?
-	</d_old>
-<e_new>
-    Snapshot destination
-  </e_new>
-<f_translation>
-Zweck des Fotos
-  </f_translation>
-<f_old_trans>
-		Was möchten Sie tun?
-	</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/snapshot_type_radio/postcard</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Send a postcard
-		</d_old>
-<e_new>
-			Send via email
-		</e_new>
-<f_translation>
-			Per E-Mail senden
-		</f_translation>
-<f_old_trans>
-			Postkarte senden
-		</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/snapshot_type_radio/texture</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Upload a snapshot
-		</d_old>
-<e_new>
-      Save to your inventory (L$10)
-    </e_new>
-<f_translation>
-Im Inventar speichern (L$10)
-    </f_translation>
-<f_old_trans>
-			Foto hochladen
-		</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/snapshot_type_radio/local</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Save snapshot to hard drive
-		</d_old>
-<e_new>
-			Save to your hard drive
-		</e_new>
-<f_translation>
-			Auf Festplatte speichern
-		</f_translation>
-<f_old_trans>
-			Foto auf Festplatte speichern
-		</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/upload_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old>Upload (L$10)</d_old>
-<e_new>Save (L$10)</e_new>
-<f_translation>Speichern (L$10)</f_translation>
-<f_old_trans>Hochladen (10 L$)</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/type_label2</b_path>
-<c_attribute></c_attribute>
-<d_old>
-		What size image do you need?
-	</d_old>
-<e_new>
-	Size
-  </e_new>
-<f_translation>
-	Größe
-  </f_translation>
-<f_old_trans>
-		Welche Bildgröße benötigen Sie?
-	</f_old_trans>
-</string><string><a_file>floater_snapshot.xml</a_file>
-<b_path>/Snapshot/auto_snapshot_check</b_path>
-<c_attribute>label</c_attribute>
-<d_old>Auto-snapshot</d_old>
-<e_new>Auto-refresh</e_new>
-<f_translation>Automatisch aktualisieren</f_translation>
-<f_old_trans>Automatisches Foto</f_old_trans>
-</string><string><a_file>menu_pie_avatar.xml</a_file>
-<b_path>/Avatar Pie/Add Friend</b_path>
-<c_attribute>label</c_attribute>
-<d_old>Add Friend</d_old>
-<e_new>Add Friend...</e_new>
-<f_translation>Freund hinzufügen...</f_translation>
-<f_old_trans>Freund hinzufügen</f_old_trans>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//OfferFriendship/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			[NAME] is offering friendship.
-      
-      By default, you will be able to 
-see each other&apos;s online status.
-		</d_old>
-<e_new>
-			[NAME] is offering friendship.
- 
-[MESSAGE]
- 
-(By default, you will be able to see each other&apos;s online status.)
-		</e_new>
-<f_translation>
-			[NAME] bietet Ihnen die Freundschaft an.
- 
-[MESSAGE]
- 
-(Standardmäßig werden Sie gegenseitig ihren Online-Status sehen können.)
-		</f_translation>
-<f_old_trans>
-			[NAME] bietet die Freundschaft an.
-      
-      Sie werden dadurch den gegenseitigen 
-Online-Status sehen können.
-		</f_old_trans>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//FailedToLoadWearableUnnamed/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Failed to load [TYPE].
-Please notify the vendor from whom you purchased this item.
-		</d_old>
-<e_new>
-			Oops!
-You tried to wear a [TYPE] and it did not load.
-
-Don&apos;t panic.
-Try again in a minute to give things a chance to settle down.
-		</e_new>
-<f_translation>
-			Hoppla!
-Sie haben versucht, ein(e)/einen [TYPE] anzuziehen, aber das Laden hat nicht funktioniert.
-
-Keine Panik.
-Versuchen Sie es in einer Minute erneut, dann wird es schon klappen.
-		</f_translation>
-<f_old_trans>
-			[TYPE] konnte nicht geladen werden.
-Wenden Sie sich an den Verkäufer dieses Objekts.
-		</f_old_trans>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//FailedToLoadWearable/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			Failed to load [TYPE] named [DESC].
-Please notify the vendor from whom you purchased this item.
-		</d_old>
-<e_new>
-			Oops!
-You tried to wear [TYPE] named [DESC] and it did not load.
-
-Don&apos;t panic.
-Try again in a minute to give things a chance to settle down.
-		</e_new>
-<f_translation>
-			Hoppla!
-Sie haben versucht, ein(e)/einen [TYPE] namens [DESC] anzuziehen, aber das Laden hat nicht funktioniert.
-
-Keine Panik.
-Versuchen Sie es in einer Minute erneut, dann wird es schon klappen.
-		</f_translation>
-<f_old_trans>
-			[TYPE] namens [DESC] konnte nicht geladen werden.
-Wenden Sie sich an den Verkäufer dieses Objekts.
-		</f_old_trans>
-</string><string><a_file>notify.xml</a_file>
-<b_path>//FirstTeleport/message</b_path>
-<c_attribute></c_attribute>
-<d_old>
-			You have just teleported. 
-You are at the Infohub nearest your destination.
-Your destination is marked with a tall red beacon.
-		</d_old>
-<e_new>
-			This region doesn&apos;t allow point-to-point teleports, so you&apos;ve been transported to the nearest telehub. 
-Your destination is marked with a tall beacon. 
-Follow the red arrow to the beacon, or click the arrow to dismiss the beacon.
-		</e_new>
-<f_translation>
-			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.
-		</f_translation>
-<f_old_trans>
-			Sie wurden teleportiert. 
-Sie befinden sich am Infohub, der Ihrem Ziel am nächsten liegt.
-Ihr Ziel ist mit einem großen roten Strahl markiert.
-		</f_old_trans>
-</string><string><a_file>panel_login.xml</a_file>
-<b_path>/panel_login/connect_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old>Connect</d_old>
-<e_new>Enter Second Life</e_new>
-<f_translation>Second Life betreten</f_translation>
-<f_old_trans>Verbinden</f_old_trans>
-</string><string><a_file>panel_preferences_chat.xml</a_file>
-<b_path>/chat/script_error</b_path>
-<c_attribute>label</c_attribute>
-<d_old>Color</d_old>
-<e_new>Errors</e_new>
-<f_translation>Fehler</f_translation>
-<f_old_trans>Farbe</f_old_trans>
-</string><string><a_file>panel_preferences_skins.xml</a_file>
-<b_path>/Skins panel/skin_selection/default</b_path>
-<c_attribute></c_attribute>
-<d_old>
-      Classic
-    </d_old>
-<e_new>
-      Default
-    </e_new>
-<f_translation>
-Standard
-    </f_translation>
-<f_old_trans>
-			Klassisch
-		</f_old_trans>
-</string><string><a_file>panel_region_debug.xml</a_file>
-<b_path>/Debug/choose_avatar_btn</b_path>
-<c_attribute>label</c_attribute>
-<d_old>Choose Avatar...</d_old>
-<e_new>Choose...</e_new>
-<f_translation>Auswählen...</f_translation>
-<f_old_trans>Avatar wählen...</f_old_trans>
-</string>
-</strings>
diff --git a/indra/newview/skins/default/xui/de/notify.xml b/indra/newview/skins/default/xui/de/notify.xml
index a2f2deb..0b50afe 100644
--- a/indra/newview/skins/default/xui/de/notify.xml
+++ b/indra/newview/skins/default/xui/de/notify.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <notifications>
 	<notify name="SystemMessageTip">
 		<message name="message">
@@ -106,8 +106,7 @@ Bitte versuchen Sie es erneut.
 	<notify name="CapsKeyOn">
 		<message name="message">
 			Die Feststelltaste ist aktiv.
-Da dies Auswirkung auf die Kennworteingabe hat,
-sollten Sie die Taste besser ausschalten.
+Da dies Auswirkung auf die Kennworteingabe hat, sollten Sie die Taste besser ausschalten.
 		</message>
 	</notify>
 	<notify name="NotecardMissing">
@@ -148,9 +147,7 @@ Bitte versuchen Sie es erneut.
 	</notify>
 	<notify name="IncompleteInventory">
 		<message name="message">
-			Die von Ihnen angebotenen Inhalte sind noch nicht
-vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie
-dann das Angebot.
+			Die von Ihnen angebotenen Inhalte sind noch nicht vollständig lokal verfügbar. Warten Sie kurz und wiederholen Sie dann das Angebot.
 		</message>
 	</notify>
 	<notify name="CannotModifyProtectedCategories">
@@ -307,8 +304,7 @@ Wählen Sie eine kleinere Landfläche.
 	</notify>
 	<notify name="TransferObjectsHighlighted">
 		<message name="message">
-			Alle Objekte auf dieser Parzelle, die an den Käufer
-der Parzelle übertragen werden, sind jetzt markiert.
+			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.
 		</message>
@@ -335,22 +331,18 @@ Laden Sie QuickTime von der QuickTime-Webseite (http://www.apple.com/de/quicktim
 	</notify>
 	<notify name="OwnedObjectsReturned">
 		<message name="message">
-			Ihre Objekte auf der ausgewählten Parzelle 
-wurden in Ihr Inventar transferiert.
+			Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
 		</message>
 	</notify>
 	<notify name="OtherObjectsReturned">
 		<message name="message">
-			Die Objekte von [FIRST] [LAST] auf dieser
-Parzelle wurden in das Inventar
-dieser Person transferiert.
+			Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
 		</message>
 	</notify>
 	<notify name="OtherObjectsReturned2">
 		<message name="message">
 			Die Objekte von [FIRST] [LAST] auf dieser 
-Parzelle von &apos;[NAME]&apos;
-wurden an ihren Eigentümer zurückgegeben.
+Parzelle von &apos;[NAME]&apos; wurden an ihren Eigentümer zurückgegeben.
 		</message>
 	</notify>
 	<notify name="GroupObjectsReturned">
@@ -379,7 +371,7 @@ Fliegen ist hier nicht möglich.
 	</notify>
 	<notify name="PushRestricted">
 		<message name="message">
-			Dieses Land ist &apos;llPushObject-beschränkt&apos;.
+			Auf diesem Land gilt „Kein Stoßen“.
 Sie können keine anderen Personen stoßen, außer Ihnen gehört das Land.
 		</message>
 	</notify>
@@ -497,8 +489,7 @@ Nur Skripts, die dem Landeigentümer gehören, funktionieren.
 	</notify>
 	<notify name="JoinGroupOfficerNoFee">
 		<message name="message">
-			[NAME] hat Sie eingeladen
-einer Gruppe als Officer beizutreten.
+			[NAME] hat Sie eingeladen einer Gruppe als Officer beizutreten.
 Der Beitritt ist kostenlos.
  
 [MESSAGE]
@@ -515,8 +506,7 @@ Der Beitritt ist kostenlos.
 	</notify>
 	<notify name="JoinGroupMember">
 		<message name="message">
-			[NAME] hat Sie eingeladen
-einer Gruppe beizutreten.
+			[NAME] hat Sie eingeladen einer Gruppe beizutreten.
 Die Beitrittsgebühr beträgt [COST] L$
  
 [MESSAGE]
@@ -593,8 +583,7 @@ Der Beitritt ist kostenlos.
 		<message name="message">
 			[NAME] bietet Ihnen die Freundschaft an.
 
-(Sie werden dadurch den gegenseitigen 
-Online-Status sehen können.)
+(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
 		</message>
 		<option name="Accept">
 			Akzeptieren
@@ -616,8 +605,7 @@ Online-Status sehen können.)
 	<notify name="OfferCallingCard">
 		<message name="message">
 			[FIRST] [LAST] bietet Ihnen eine Visitenkarte an.
-Dies erstellt ein Lesezeichen in Ihrem Inventar,
-damit Sie diesen Einwohner jederzeit über IM erreichen.
+Dies erstellt ein Lesezeichen in Ihrem Inventar, damit Sie diesen Einwohner jederzeit über IM erreichen.
 		</message>
 		<option name="Accept">
 			Akzeptieren
@@ -809,15 +797,13 @@ Anfrage gestatten?
 		<message name="message">
 			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.
+Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms.
 		</message>
 	</notify>
 	<notify name="FirstBalanceDecrease">
 		<message name="message">
 			Sie haben gerade [AMOUNT] L$ bezahlt.
-Ihren Kontostand sehen Sie in der oberen 
-rechten Ecke des Bildschirms.
+Ihren Kontostand sehen Sie in der oberen rechten Ecke des Bildschirms.
 		</message>
 	</notify>
 	<notify name="FirstSit">
@@ -831,8 +817,7 @@ Klicken Sie auf &apos;Aufstehen&apos;, um aufzustehen.
 		<message name="message">
 			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.
+Nutzen Sie die Optionen links, um Dinge zu finden und um verschiedene Hintergründe anzuzeigen.
 		</message>
 	</notify>
 	<notify name="FirstBuild">
@@ -854,8 +839,7 @@ Die rechte Maustaste zeigt immer ein Aktionsmenü an.
 	<notify name="FirstTeleport">
 		<message name="message">
 			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.
+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.
 		</message>
 	</notify>
 	<notify name="FirstOverrideKeys">
@@ -870,8 +854,7 @@ Drücken Sie dazu &apos;M&apos;.
 		<message name="message">
 			Sie bearbeiten gerade Ihr Aussehen.  
 Benutzen Sie die Pfeiltasten zum Drehen und Zoomen. 
-Klicken Sie auf &apos;Alles speichern&apos;, wenn Sie fertig sind, 
-um Ihr Aussehen zu speichern.  
+Klicken Sie auf &apos;Alles speichern&apos;, wenn Sie fertig sind, um Ihr Aussehen zu speichern.  
 Sie können Ihr Aussehen jederzeit verändern.
 		</message>
 	</notify>
@@ -886,8 +869,7 @@ Sie können Ihr Aussehen jederzeit verändern.
 	<notify name="FirstSandbox">
 		<message name="message">
 			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.
+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.
 		</message>
@@ -895,8 +877,7 @@ Sandkastenregionen kommen selten vor und sind entsprechend gekennzeichnet.
 	<notify name="FirstFlexible">
 		<message name="message">
 			Dieses Objekt ist flexibel. 
-Ein flexibles Objekt ist ein Phantom und nicht physisch, 
-bis die Option &apos;Flexibel&apos; deaktiviert wurde.
+Ein flexibles Objekt ist ein Phantom und nicht physisch, bis die Option &apos;Flexibel&apos; deaktiviert wurde.
 		</message>
 	</notify>
 	<notify name="FirstDebugMenus">
diff --git a/indra/newview/skins/default/xui/de/panel_avatar.xml b/indra/newview/skins/default/xui/de/panel_avatar.xml
index 08f57a4..f7f58ea 100644
--- a/indra/newview/skins/default/xui/de/panel_avatar.xml
+++ b/indra/newview/skins/default/xui/de/panel_avatar.xml
@@ -164,10 +164,10 @@ Die betreffende Person oder andere können sie nicht sehen.
 	</tab_container>
 	<button label="OK" label_selected="OK" name="OK"/>
 	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<button label="Hinauswerfen" label_selected="Hinauswerfen" name="Kick"/>
-	<button label="Einfrieren" label_selected="Einfrieren" name="Freeze" tool_tip="Bewegungen und Chat dieses Einwohners abschalten."/>
-	<button label="Auftauen" label_selected="Auftauen" name="Unfreeze" tool_tip="Einwohner auftauen"/>
-	<button label="CSR" label_selected="CSR" name="csr_btn" tool_tip="Öffnet das Kundendiensttool für diesen Einwohner"/>
+	<button label="Hinauswerfen" label_selected="Hinauswerfen" name="Kick" font="SansSerifSmall" width="82" />
+	<button label="Einfrieren" label_selected="Einfrieren" name="Freeze" tool_tip="Bewegungen und Chat dieses Einwohners abschalten." width="82"/>
+	<button label="Auftauen" label_selected="Auftauen" name="Unfreeze" tool_tip="Einwohner auftauen" width="82" />
+	<button label="CSR" label_selected="CSR" name="csr_btn" tool_tip="Öffnet das Kundendiensttool für diesen Einwohner" width="82"/>
 	<string name="ShowOnMapNonFriend">
 		Position auf Karte zeigen.
 Deaktiviert, weil zwischen Ihnen
diff --git a/indra/newview/skins/default/xui/de/panel_chat_bar.xml b/indra/newview/skins/default/xui/de/panel_chat_bar.xml
index 67a5c6e..f4aa8a2 100644
--- a/indra/newview/skins/default/xui/de/panel_chat_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_chat_bar.xml
@@ -1,14 +1,17 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="chat_bar">
 	<panel/>
 	<button label="Lokaler Chat" name="History" tool_tip="Klicken Sie hier zur Anzeige des Gesprächs"/>
 	<line_editor label="Zum Chatten hier klicken." name="Chat Editor" tool_tip="Eingabe für Sprechen, Strg-Eingabe für Rufen."/>
 	<flyout_button label="Reden" name="Say" tool_tip="(Eingabe)">
+		<flyout_button_item name="shout_item">
+			Rufen
+		</flyout_button_item>
 		<flyout_button_item name="say_item">
 			Reden
 		</flyout_button_item>
-		<flyout_button_item name="shout_item">
-			Rufen
+		<flyout_button_item name="whisper_item">
+			Flüstern
 		</flyout_button_item>
 	</flyout_button>
 	<combo_box label="Gesten" name="Gesture"/>
diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml
index d232bfa..0b75f1a 100644
--- a/indra/newview/skins/default/xui/de/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_general.xml
@@ -1,36 +1,35 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Allgemein" name="general_tab">
-	<text name="help_text">
+	<string name="help_text">
 		Die Registerkarte &apos;Allgemein&apos; enthält Informationen über
 diese Gruppe, eine Liste der Eigentümer und sichtbaren Mitglieder, 
 allgemeine Gruppeneinstellungen und Mitgliederoptionen.
 
 Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen.
-	</text>
+	</string>
 	<string name="group_info_unchanged">
 		Die allgemeine Gruppeninfo wurde geändert.
 	</string>
-	<button label="?" label_selected="?" name="help_button" />
-	<line_editor label="Neuen Gruppennamen hier eingeben" name="group_name_editor" />
+	<button label="?" label_selected="?" name="help_button"/>
+	<line_editor label="Neuen Gruppennamen hier eingeben" name="group_name_editor"/>
 	<text name="group_name">
 		Neuen Gruppennamen hier eingeben
 	</text>
 	<text name="prepend_founded_by">
 		Gegründet von
 	</text>
-	<text left_delta="80" name="founder_name">
+	<text name="founder_name" left_delta="79">
 		(wartet)
 	</text>
 	<text name="group_charter_label">
 		Gruppencharta
 	</text>
-	<texture_picker label="Gruppeninsignien" name="insignia"
-	     tool_tip="Klicken Sie hier, um ein Bild auszuwählen" />
+	<texture_picker label="Gruppeninsignien" name="insignia" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
 	<text_editor name="charter">
 		Gruppencharta
 	</text_editor>
-	<button label="Beitreten (0 L$)" label_selected="Beitreten (0 L$)" name="join_button" />
-	<button label="Detailansicht" label_selected="Detailansicht" name="info_button" />
+	<button label="Beitreten (0 L$)" label_selected="Beitreten (0 L$)" name="join_button"/>
+	<button label="Detailansicht" label_selected="Detailansicht" name="info_button"/>
 	<text name="text_owners_and_visible_members">
 		Eigentümer und sichtbare Mitglieder
 	</text>
@@ -38,37 +37,19 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen.
 		(Eigentümer werden fettgedruckt angezeigt)
 	</text>
 	<name_list name="visible_members">
-		<column label="Mitgliedsname" name="name" relwidth="0.40" />
-		<column label="Titel" name="title" relwidth="0.25" />
-		<column label="Letzte Anmeldung" name="online" relwidth="0.35" />
+		<column label="Mitgliedsname" name="name"/>
+		<column label="Titel" name="title"/>
+		<column label="Letzte Anmeldung" name="online"/>
 	</name_list>
-	<text name="incomplete_member_data_str">
-		Mitgliedsdaten werden abgerufen
-	</text>
-	<text name="confirm_group_create_str">
-		Die Gründung dieser Gruppe kostet 100 L$. 
-Sind Sie wirklich, WIRKLICH sicher, dass Sie 100 L$ für die Gründung dieser Gruppe ausgeben möchten?
-Falls in den nächsten 48 Stunden niemand sonst dieser Gruppe beitritt, wird sie aufgelöst und der Name der Gruppe wird nicht mehr verfügbar sein.
-	</text>
 	<text name="text_group_preferences">
 		Gruppeneinstellungen
 	</text>
 	<panel name="preferences_container">
-		<check_box label="In Suche anzeigen" name="show_in_group_list"
-		     tool_tip="Diese Gruppe in Suchergebnissen anzeigen." />
-		<check_box label="Im Web veröffentlichen" name="publish_on_web"
-		     tool_tip="Festlegen, ob die Gruppeninformationen im Web veröffentlicht werden dürfen." />
-		<check_box label="Registrierung offen" name="open_enrollement"
-		     tool_tip="Festlegen, ob der Gruppenbeitritt ohne Einladung zulässig ist." />
-		<check_box label="Beitrittsgebühr: L$" name="check_enrollment_fee"
-		     tool_tip="Festlegen, ob Neumitglieder eine Beitrittsgebühr zahlen müssen."
-		     width="125" />
-		<spinner name="spin_enrollment_fee"
-		     tool_tip="Wenn &apos;Beitrittsgebühr&apos; aktiviert ist, müssen neue Mitglieder diesen Betrag zahlen." />
-		<check_box label="Ab-18-Gruppe" name="mature"
-		     tool_tip="Festlegen, ob die Informationen Ihrer Gruppe nicht jugendfrei sind." />
-		<combo_box name="group_mature_check"
-		     tool_tip="Festlegen, ob die Informationen Ihrer Gruppe nicht jugendfrei sind.">
+		<check_box label="In Suche anzeigen" name="show_in_group_list" tool_tip="Diese Gruppe in Suchergebnissen anzeigen."/>
+		<check_box label="Registrierung offen" name="open_enrollement" tool_tip="Festlegen, ob der Gruppenbeitritt ohne Einladung zulässig ist."/>
+		<check_box label="Beitrittsgebühr: L$" name="check_enrollment_fee" tool_tip="Festlegen, ob Neumitglieder eine Beitrittsgebühr zahlen müssen." width="125"/>
+		<spinner name="spin_enrollment_fee" tool_tip="Wenn &apos;Beitrittsgebühr&apos; aktiviert ist, müssen neue Mitglieder diesen Betrag zahlen."/>
+		<combo_box name="group_mature_check" tool_tip="Festlegen, ob die Informationen Ihrer Gruppe nicht jugendfrei sind.">
 			<combo_item name="select_mature">
 				- Jugendfreigabe wählen -
 			</combo_item>
@@ -83,11 +64,17 @@ Falls in den nächsten 48 Stunden niemand sonst dieser Gruppe beitritt, wird sie
 			<text name="active_title_label">
 				Mein aktiver Titel
 			</text>
+			<combo_box name="active_title" tool_tip="Legt fest, was im Namensschild Ihres Avatars angezeigt wird, wenn diese Gruppe aktiviert ist."/>
 		</panel>
-		<check_box label="Gruppenmitteilungen erhalten" name="receive_notices"
-		     tool_tip="Festlegen, ob Sie von dieser Gruppe Mitteilungen erhalten können.  Deaktivieren Sie diese Option, wenn Sie von der Gruppe Spam erhalten."
-		     width="173" />
-		<check_box label="Gruppe im Profil anzeigen" name="list_groups_in_profile"
-		     tool_tip="Steuert, ob diese Gruppe in Ihrem Profil angezeigt wird" />
+		<check_box label="Gruppenmitteilungen erhalten" name="receive_notices" tool_tip="Festlegen, ob Sie von dieser Gruppe Mitteilungen erhalten können.  Deaktivieren Sie diese Option, wenn Sie von der Gruppe Spam erhalten." width="173"/>
+		<check_box label="Gruppe im Profil anzeigen" name="list_groups_in_profile" tool_tip="Steuert, ob diese Gruppe in Ihrem Profil angezeigt wird"/>
 	</panel>
+	<string name="incomplete_member_data_str">
+		Mitgliedsdaten werden abgerufen
+	</string>
+	<string name="confirm_group_create_str">
+		Die Gründung dieser Gruppe kostet 100 L$. 
+Sind Sie wirklich, WIRKLICH sicher, dass Sie 100 L$ für die Gründung dieser Gruppe ausgeben möchten?
+Falls in den nächsten 48 Stunden niemand sonst dieser Gruppe beitritt, wird sie aufgelöst und der Name der Gruppe wird nicht mehr verfügbar sein.
+	</string>
 </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 204759f..1304671 100644
--- a/indra/newview/skins/default/xui/de/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml
@@ -1,15 +1,12 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Mitglieder und Rollen" name="roles_tab">
-	<text name="default_needs_apply_text">
+	<string name="default_needs_apply_text">
 		Das Unterregister enthält nicht übernommene Änderungen.
-	</text>
-	<text name="want_apply_text">
+	</string>
+	<string name="want_apply_text">
 		Diese Änderungen übernehmen?
-	</text>
-	<text name="cant_delete_role">
-		Die Rollen &apos;Jeder&apos; und &apos;Eigentümer&apos; können nicht gelöscht werden.
-	</text>
-	<button label="?" name="help_button" />
+	</string>
+	<button label="?" name="help_button"/>
 	<panel name="members_header">
 		<text name="static">
 			Mitglieder und Rollen
@@ -47,52 +44,52 @@ Mitglieder diese Fähigkeit haben.
 	</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" />
+			<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 name="donated" />
-				<column label="Letzte Anmeldung" name="online" />
+				<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="Neue Person einladen..." name="member_invite" />
-			<button label="Aus Gruppe werfen" name="member_eject" />
-			<text name="help_text">
+			<button label="Neue Person 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.
-			</text>
+			</string>
 		</panel>
 		<panel label="Rollen" name="roles_sub_tab">
-			<button label="Suchen" name="search_button" />
-			<button label="Alle anzeigen" name="show_all_button" />
+			<button label="Suchen" name="search_button"/>
+			<button label="Alle anzeigen" name="show_all_button"/>
 			<scroll_list name="role_list">
-				<column name="name" />
-				<column label="Titel" name="title" />
-				<column label="Mitglieder" name="members" />
+				<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" />
-			<text name="help_text">
+			<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 &apos;Jeder&apos; und &apos;Eigentümer&apos;.
-			</text>
+			</string>
 			<string name="cant_delete_role">
 				Die Rollen &apos;Jeder&apos; und &apos;Eigentümer&apos; 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" />
+			<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" />
+				<column label="" name="icon"/>
+				<column label="" name="action"/>
 			</scroll_list>
-			<text name="help_text">
+			<string name="help_text">
 				Fähigkeiten verleihen Mitgliedern in Rollen bestimmte
 Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
-			</text>
+			</string>
 		</panel>
 	</tab_container>
 	<panel name="members_footer">
@@ -103,13 +100,12 @@ Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
 			Zulässige Fähigkeiten
 		</text>
 		<scroll_list name="member_assigned_roles">
-			<column label="" name="checkbox" />
-			<column label="" name="role" />
+			<column label="" name="checkbox"/>
+			<column label="" name="role"/>
 		</scroll_list>
-		<scroll_list name="member_allowed_actions"
-		     tool_tip="For Details of each Allowed Ability see the Abilities tab.">
-			<column label="" name="icon" />
-			<column label="" name="action" />
+		<scroll_list name="member_allowed_actions" >
+			<column label="" name="icon"/>
+			<column label="" name="action"/>
 		</scroll_list>
 	</panel>
 	<panel name="roles_footer">
@@ -134,17 +130,14 @@ Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten.
 		<text name="static4">
 			Mitglieder in Rolle
 		</text>
-		<text name="static5"
-		     tool_tip="Eine Liste der Fähigkeiten der aktuell ausgewählten Rolle.">
+		<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 &apos;Allgemein&apos; für Personen außerhalb der Gruppe sichtbar sind." />
-		<scroll_list name="role_allowed_actions"
-		     tool_tip="For Details of each Allowed Ability see the Abilities tab.">
-			<column label="" name="icon" />
-			<column label="" name="checkbox" />
-			<column label="" name="action" />
+		<check_box label="Mitglieder sind sichtbar" name="role_visible_in_list" tool_tip="Festlegen, ob Mitglieder in dieser Rolle auf der Registerkarte &apos;Allgemein&apos; für Personen außerhalb der Gruppe sichtbar sind."/>
+		<scroll_list name="role_allowed_actions" >
+			<column label="" name="icon"/>
+			<column label="" name="checkbox"/>
+			<column label="" name="action"/>
 		</scroll_list>
 	</panel>
 	<panel name="actions_footer">
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
index fbf5742..b142e2e 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -1,26 +1,14 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Allgemein" name="general_panel">
-	<combo_box name="location_combobox">
-		<combo_item name="MyHome">
+	<radio_group name="default_start_location">
+		<radio_item name="MyHome" tool_tip="Als Standardeinstellung in Zuhauseposition anmelden.">
 			Mein Heimatort
-		</combo_item>
-		<combo_item name="MyLastLocation">
-			Mein letzter Standort
-		</combo_item>
-	</combo_box>
-	<check_box label="Startposition auf Anmeldebildschirm anzeigen"
-	     name="show_location_checkbox" />
-	<radio_group name="fade_out_radio">
-		<radio_item type="string" length="1" name="Never">
-			Nie
 		</radio_item>
-		<radio_item type="string" length="1" name="Temporarily">
-			Temporär anzeigen
-		</radio_item>
-		<radio_item type="string" length="1" name="Always">
-			Immer
+		<radio_item name="MyLastLocation" tool_tip="Als Standardeinstellung in letztem Standort anmelden.">
+			Mein letzter Standort
 		</radio_item>
 	</radio_group>
+	<check_box label="Startposition auf Anmeldebildschirm anzeigen" name="show_location_checkbox"/>
 	<combo_box name="fade_out_combobox">
 		<combo_item name="Never">
 			Nie
@@ -32,93 +20,86 @@
 			Immer
 		</combo_item>
 	</combo_box>
-	<check_box label="Meinen Namen auf meinem Bildschirm ausblenden"
-	     name="show_my_name_checkbox" />
+	<check_box label="Kleine Avatarnamen" name="small_avatar_names_checkbox"/>
+	<check_box label="Meinen Namen auf meinem Bildschirm ausblenden" name="show_my_name_checkbox"/>
 	<text name="group_titles_textbox">
 		Gruppentitel:
 	</text>
-	<check_box label="Alle Gruppentitel ausblenden" name="show_all_title_checkbox" />
-	<check_box label="Meinen Gruppentitel ausblenden" name="show_my_title_checkbox" />
-	<check_box label="Kleine Avatarnamen" name="small_avatar_names_checkbox" />
-	<color_swatch label="" name="effect_color_swatch"
-	     tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen" />
+	<check_box label="Alle Gruppentitel ausblenden" name="show_all_title_checkbox"/>
+	<check_box label="Meinen Gruppentitel ausblenden" name="show_my_title_checkbox"/>
+	<color_swatch label="" name="effect_color_swatch" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
 	<text name="UI Size:">
 		UI-Größe:
 	</text>
-	<check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale" />
-	<spinner label="Timeout für Abwesenheit:" name="afk_timeout_spinner" />
-	<check_box label="Online-Freundbenachrichtigungen anzeigen"
-	     name="friends_online_notify_checkbox" />
-	<check_box label="Minikarte drehen" name="rotate_mini_map_checkbox" />
-	<check_box label="L$ Eingänge und Ausgaben melden" name="notify_money_change_checkbox" />
-	<check_box label="Standard-Farbauswahl verwenden" name="use_system_color_picker_checkbox"
-	     tool_tip="Standard-Farbauswahl des Systems anstelle des Second Life-eigenen verwenden." />
-	<check_box label="Suchleiste in Menüleiste anzeigen" name="show_search_panel"
-	     tool_tip="Die eingebettete Suchleiste anzeigen." />
-	<text type="string" length="1" name="start_location_textbox">
+	<check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale"/>
+	<spinner label="Timeout für Abwesenheit:" name="afk_timeout_spinner"/>
+	<check_box label="Minikarte drehen" name="rotate_mini_map_checkbox"/>
+	<check_box label="L$ Eingänge und Ausgaben melden" name="notify_money_change_checkbox"/>
+	<check_box label="Standard-Farbauswahl verwenden" name="use_system_color_picker_checkbox" tool_tip="Standard-Farbauswahl des Systems anstelle des Second Life-eigenen verwenden."/>
+	<check_box label="Suchleiste in Menüleiste anzeigen" name="show_search_panel" tool_tip="Die eingebettete Suchleiste anzeigen."/>
+	<text name="start_location_textbox">
 		Startposition:
 	</text>
-	<text type="string" length="1" name="show_names_textbox">
+	<text name="show_names_textbox">
 		Namen anzeigen:
 	</text>
-	<text type="string" length="1" name="effects_color_textbox">
+	<text name="effects_color_textbox">
 		Farbe für meine Effekte:
 	</text>
-	<text type="string" length="1" name="seconds_textbox">
+	<text name="seconds_textbox">
 		Sekunden
 	</text>
-	<text type="string" length="1" name="crash_report_textbox">
+	<text name="crash_report_textbox">
 		Crash-Berichte:
 	</text>
-	<text type="string" length="1" name="language_textbox">
+	<text name="language_textbox">
 		Sprache:
 	</text>
-	<text type="string" length="1" name="language_textbox2">
+	<text name="language_textbox2">
 		(Erfordert Neustart)
 	</text>
-	<text name="region_name_prompt">
+	<string name="region_name_prompt">
 		&lt;Region eingeben&gt;
-	</text>
+	</string>
 	<combo_box name="crash_behavior_combobox">
-		<combo_item type="string" length="1" name="Askbeforesending">
+		<combo_item name="Askbeforesending">
 			Vor dem Senden fragen
 		</combo_item>
-		<combo_item type="string" length="1" name="Alwayssend">
+		<combo_item name="Alwayssend">
 			Immer senden
 		</combo_item>
-		<combo_item type="string" length="1" name="Neversend">
+		<combo_item name="Neversend">
 			Nie senden
 		</combo_item>
 	</combo_box>
 	<combo_box name="language_combobox">
-		<combo_item type="string" length="1" name="System Default Language">
+		<combo_item name="System Default Language">
 			Betriebssystem-Einstellung
 		</combo_item>
-		<combo_item type="string" length="1" name="English">
+		<combo_item name="English">
 			English (Englisch)
 		</combo_item>
-		<combo_item type="string" length="1" name="Chinese">
+		<combo_item name="Chinese">
 			汉语/漢語 (Chinesisch) - Beta
 		</combo_item>
-		<combo_item type="string" length="1" name="Deutsch(German)">
+		<combo_item name="Deutsch(German)">
 			Deutsch - Beta
 		</combo_item>
-		<combo_item type="string" length="1" name="French">
+		<combo_item name="French">
 			Français (Französisch) - Beta
 		</combo_item>
-		<combo_item type="string" length="1" name="(Japanese)">
+		<combo_item name="(Japanese)">
 			日本語 (Japanisch) - Beta
 		</combo_item>
-		<combo_item type="string" length="1" name="(Korean)">
+		<combo_item name="(Korean)">
 			한국어 (Koreanisch) - Beta
 		</combo_item>
-		<combo_item type="string" length="1" name="Portugese">
+		<combo_item name="Portugese">
 			Português (Portugiesisch) - Beta
 		</combo_item>
-		<combo_item type="string" length="1" name="Spanish">
+		<combo_item name="Spanish">
 			Español (Spanisch) - Beta
 		</combo_item>
 	</combo_box>
-	<check_box label="Objekten Sprache mitteilen" name="language_is_public"
-	     tool_tip="In-Welt-Objekten wird Ihre bevorzugte Spracheinstellung mitgeteilt." />
+	<check_box label="Objekten Sprache mitteilen" name="language_is_public" tool_tip="In-Welt-Objekten wird Ihre bevorzugte Spracheinstellung mitgeteilt."/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_network.xml b/indra/newview/skins/default/xui/de/panel_preferences_network.xml
index efd797b..4878ab1 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_network.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_network.xml
@@ -1,20 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Netzwerk" name="network">
-	<text type="string" length="1" name="text_box">
+	<text name="text_box">
 		Maximale Bandbreite:
 	</text>
-	<text type="string" length="1" name="text_box2">
+	<text name="text_box2">
 		kbit/s (Kilobit pro Sekunde)
 	</text>
-	<text type="string" length="1" name="cache_size_label_l">
+	<text name="cache_size_label_l">
 		Größe Festplatten-Cache:
 	</text>
-	<button label="Cache leeren" name="clear_cache" />
-	<text type="string" length="1" name="cache_location_label">
+	<text name="text_box5">
+		MB
+	</text>
+	<button label="Cache leeren" name="clear_cache"/>
+	<text name="cache_location_label">
 		Festplatten-Cache-Verzeichnis:
 	</text>
-	<button label="Festlegen" label_selected="Festlegen" name="set_cache" />
-	<button label="Zurücksetzen" label_selected="Festlegen" name="reset_cache" />
-	<check_box label="Benutzerdefinierter Port" name="connection_port_enabled" />
-	<spinner label="Port-Nummer:" name="connection_port" />
+	<button label="Festlegen" label_selected="Festlegen" name="set_cache"/>
+	<button label="Zurücksetzen" label_selected="Festlegen" name="reset_cache"/>
+	<check_box label="Benutzerdefinierter Port" name="connection_port_enabled"/>
+	<spinner label="Port-Nummer:" name="connection_port"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_voice.xml b/indra/newview/skins/default/xui/de/panel_preferences_voice.xml
index 137ce6d..634eba0 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_voice.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_voice.xml
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Voice-Chat" name="chat">
 	<text_editor name="voice_unavailable">
 		Voice-Chat ist nicht verfügbar
 	</text_editor>
-	<check_box label="Voice-Chat aktivieren" name="enable_voice_check" />
+	<check_box label="Voice-Chat aktivieren" name="enable_voice_check"/>
 	<radio_group name="ear_location">
 		<radio_item name="0">
 			Voice-Chat von Kameraposition aus hören.
@@ -15,26 +15,20 @@
 	<text name="push_to_talk_heading">
 		Zum Sprechen drücken
 	</text>
-	<text_editor name="voice_chat_description">
-		HINWEIS: Beim Öffnen der Geräte-Einstellungen oder der Voice-Chat-Einrichtung werden Sie vorübergehend vom Voice-Chat getrennt.
-	</text_editor>
-	<check_box label="Viewer im &apos;Zum-Sprechen-drücken&apos;-Modus starten"
-	     name="push_to_talk_check" />
-	<check_box label="&apos;Zum-Sprechen-drücken&apos; im Umschaltmodus verwenden"
-	     name="push_to_talk_toggle_check" />
+	<check_box label="Viewer im &apos;Zum-Sprechen-drücken&apos;-Modus starten" name="push_to_talk_check"/>
+	<check_box label="&apos;Zum-Sprechen-drücken&apos; im Umschaltmodus verwenden" name="push_to_talk_toggle_check"/>
 	<text name="push_to_talk_label">
 		Auslöser für &apos;Zum-Sprechen-drücken&apos;:
 	</text>
-	<button label="Taste festlegen" name="set_voice_hotkey_button" />
-	<button label="Mittlere Maustaste" name="set_voice_middlemouse_button" />
+	<button label="Taste festlegen" name="set_voice_hotkey_button"/>
+	<button label="Mittlere Maustaste" name="set_voice_middlemouse_button"/>
 	<text name="privacy_heading">
 		Privatsphäre
 	</text>
-	<check_box label="Anrufe nur von Personen auf meiner Freundesliste annehmen"
-	     name="voice_call_friends_only_check" />
+	<check_box label="Anrufe nur von Personen auf meiner Freundesliste annehmen" name="voice_call_friends_only_check"/>
 	<text_editor name="device_settings_text">
-		HINWEIS: Beim Öffnen der Geräte-Einstellungen werden Sie vorübergehend vom Voice-Chat getrennt.
+		HINWEIS: Beim Öffnen der Geräte-Einstellungen werden Sie vorübergehend vom Voice-Chat getrennt. Vorgenommene Änderungen werden sofort gültig.
 	</text_editor>
-	<button label="Geräte-Einstellungen" name="device_settings_btn" />
-	<button label="Voice-Chat-Einrichtung" name="launch_voice_wizard_button" />
+	<button label="Geräte-Einstellungen" name="device_settings_btn"/>
+	<button label="Voice-Chat-Einrichtung" name="launch_voice_wizard_button"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml
index 7d6b1ff..9e03ebe 100644
--- a/indra/newview/skins/default/xui/de/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Debug" name="Debug">
 	<text name="region_text_lbl">
 		Region:
@@ -6,42 +6,35 @@
 	<text name="region_text">
 		unbekannt
 	</text>
-	<check_box label="Skripts deaktivieren" name="disable_scripts_check"
-	     tool_tip="Skripts in dieser Region deaktivieren" />
-	<button label="?" name="disable_scripts_help" />
-	<check_box label="Kollisionen deaktivieren" name="disable_collisions_check"
-	     tool_tip="Nicht-Avatar-Kollisionen in dieser Region deaktivieren" />
-	<button label="?" name="disable_collisions_help" />
-	<check_box label="Physik deaktivieren" name="disable_physics_check"
-	     tool_tip="Physik in dieser Region deaktivieren" />
-	<button label="?" name="disable_physics_help" />
-	<button label="Übernehmen" name="apply_btn" />
+	<check_box label="Skripts deaktivieren" name="disable_scripts_check" tool_tip="Skripts in dieser Region deaktivieren"/>
+	<button label="?" name="disable_scripts_help"/>
+	<check_box label="Kollisionen deaktivieren" name="disable_collisions_check" tool_tip="Nicht-Avatar-Kollisionen in dieser Region deaktivieren"/>
+	<button label="?" name="disable_collisions_help"/>
+	<check_box label="Physik deaktivieren" name="disable_physics_check" tool_tip="Physik in dieser Region deaktivieren"/>
+	<button label="?" name="disable_physics_help"/>
+	<button label="Übernehmen" name="apply_btn"/>
+	<text name="objret_text_lbl" width="105">
+		Objekt zurückgeben
+	</text>
+	<text name="resident_text_lbl">
+		Einwohner:
+	</text>
 	<line_editor name="target_avatar_name">
 		(keiner)
 	</line_editor>
-	<button label="Auswählen..." name="choose_avatar_btn" />
-	<button label="Skriptobjekte des Avatars auf fremdem Land zurückgeben"
-	     name="return_scripted_other_land_btn" />
-	<button label="ALLE Skriptobjekte des Avatars zurückgeben"
-	     name="return_scripted_all_btn" />
-	<check_box label="Nur Objekte mit Skripten zurückgeben" name="return_scripts"
-	     tool_tip="Es werden nur die Objekte zurückgegeben, die über Skripte verfügen." />
-	<check_box label="Nur Objekte auf dem Land eines anderen Einwohners zurückgeben"
-	     name="return_other_land"
-	     tool_tip="Es werden nur die Objekte zurückgegeben, die sich auf dem Land eines anderen Einwohners befinden" />
-	<check_box label="Objekte in jeder Region dieses Grundstücks zurückgeben"
-	     name="return_estate_wide"
-	     tool_tip="Es werden die Objekte in allen Regionen dieses Grundstücks zurückgegeben" />
-	<button label="Zurückgeben" name="return_btn" width="90" />
-	<button label="Top-Kollisionsobjekte..." name="top_colliders_btn"
-	     tool_tip="Liste der Objekte mit den meisten potenziellen Kollisionen" />
-	<button label="?" name="top_colliders_help" />
-	<button label="Top-Skripts..." name="top_scripts_btn"
-	     tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen um Skripts auszuführen." />
-	<button label="?" name="top_scripts_help" />
-	<button label="Region neu starten" name="restart_btn"
-	     tool_tip="2-Minuten-Countdown und Region neu starten" />
-	<button label="?" name="restart_help" />
-	<button label="Neustart verzögern" name="cancel_restart_btn"
-	     tool_tip="Regionsneustart um eine Stunde verschieben" />
+	<button label="Auswählen..." name="choose_avatar_btn"/>
+	<text name="options_text_lbl">
+		Optionen:
+	</text>
+	<check_box label="Nur Objekte mit Skripten zurückgeben" name="return_scripts" tool_tip="Es werden nur die Objekte zurückgegeben, die über Skripte verfügen."/>
+	<check_box label="Nur Objekte auf dem Land eines anderen Einwohners zurückgeben" name="return_other_land" tool_tip="Es werden nur die Objekte zurückgegeben, die sich auf dem Land eines anderen Einwohners befinden"/>
+	<check_box label="Objekte in jeder Region dieses Grundstücks zurückgeben" name="return_estate_wide" tool_tip="Es werden die Objekte in allen Regionen dieses Grundstücks zurückgegeben"/>
+	<button label="Zurückgeben" name="return_btn" width="90"/>
+	<button label="Top-Kollisionsobjekte..." name="top_colliders_btn" tool_tip="Liste der Objekte mit den meisten potenziellen Kollisionen"/>
+	<button label="?" name="top_colliders_help"/>
+	<button label="Top-Skripts..." name="top_scripts_btn" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um Skripts auszuführen."/>
+	<button label="?" name="top_scripts_help"/>
+	<button label="Region neu starten" name="restart_btn" tool_tip="2-Minuten-Countdown und Region neu starten"/>
+	<button label="?" name="restart_help"/>
+	<button label="Neustart verzögern" name="cancel_restart_btn" tool_tip="Regionsneustart um eine Stunde verschieben"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml
index 625f6ab..ddc5941 100644
--- a/indra/newview/skins/default/xui/de/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel label="Grundstück" name="Estate">
 	<text name="estate_help_text">
-		Änderungen auf dieser Registerkarte wirken sich auf alle Regionen auf dem Grundstück aus.
+		Änderungen auf dieser Registerkarte wirken sich
+auf alle Regionen auf dem Grundstück aus.
 	</text>
 	<text name="estate_text">
 		Grundstück:
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 d0c3460..adfe387 100644
--- a/indra/newview/skins/default/xui/de/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml
@@ -1,14 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="status">
-	<text type="string" length="1" name="ParcelNameText"
-	     tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen.">
+	<text length="1" name="ParcelNameText" tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen." type="string">
 		Parzellenname hier
 	</text>
-	<text type="string" length="1" name="BalanceText" tool_tip="Kontostand">
+	<text length="1" name="BalanceText" tool_tip="Kontostand" type="string">
 		Wird geladen...
 	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Geld kaufen" />
-	<text type="string" length="12" name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
+	<button label="" label_selected="" name="buycurrency" tool_tip="Geld kaufen"/>
+	<text length="12" name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)" type="string">
 		12:00
 	</text>
 	<text name="StatBarDaysOfWeek">
@@ -17,29 +16,27 @@
 	<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 type="string" length="1" name="HealthText" tool_tip="Gesundheit">
+	<button label="" label_selected="" name="scriptout" tool_tip="Skriptwarnungen und -fehler"/>
+	<button label="" label_selected="" name="health" tool_tip="Gesundheit"/>
+	<text length="1" name="HealthText" tool_tip="Gesundheit" type="string">
 		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="llPushObject beschränkt" />
-	<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" />
+	<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" />
+	<line_editor label="Suchen" name="search_editor" tool_tip="Second Life durchsuchen"/>
+	<button name="search_btn" tool_tip="Second Life durchsuchen"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/en-us/alerts.xml b/indra/newview/skins/default/xui/en-us/alerts.xml
index 44b9141..ab323e7 100644
--- a/indra/newview/skins/default/xui/en-us/alerts.xml
+++ b/indra/newview/skins/default/xui/en-us/alerts.xml
@@ -2978,20 +2978,6 @@ Download to your Applications folder?
 			Cancel
 		</option>
 	</alert>
-	<alert modal="true" name="WebLaunchReleaseNotes">
-		<message name="message">
-			View the [SECOND_LIFE] Release Notes?
-		</message>
-		<ignore name="ignore">
-			When launching web browser to view the Release Notes
-		</ignore>
-		<option name="Gotopage">
-			OK
-		</option>
-		<option name="Cancel">
-			Cancel
-		</option>
-	</alert>
 	<alert modal="true" name="ReturnToOwner">
 		<message name="message">
 			Are you sure you want to return the selected
@@ -4268,7 +4254,7 @@ http://secondlife.com/corporate/cs.php
 
 All reported abuses of the Terms of Service and Community Standards 
 are investigated and resolved. You can view the incident 
-resolution on the on the Incident Report at:
+resolution on the Incident Report at:
 
 http://secondlife.com/support/incidentreport.php
 		</message>
diff --git a/indra/newview/skins/default/xui/en-us/floater_about.xml b/indra/newview/skins/default/xui/en-us/floater_about.xml
index f50d1ad..2f1156e 100644
--- a/indra/newview/skins/default/xui/en-us/floater_about.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_about.xml
@@ -9,7 +9,7 @@
   word_wrap="true">
   Second Life is brought to you by 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 and many others.
 
-  Thank you to the following residents for helping to ensure that this is the best version yet: Aminom Marvin, ava ganache, Balthazar Fouroux, CrystalShard Foo, Davec Horsforth, Drew Dwi, Ellla McMahon, Gellan Glenelg, Harleen Gretzky, istephanija munro, Iustinian Tomsen, JC Glimmer, Joeseph Albanese, kelly young, Latif Khalifa, Lex Neva, McCabe Maxsted, Michi Lumin, moni duettmann, Moon Metty, motor loon, Opensource Obscure, Sky Hye, Soap Clawtooth, velveeta biedermann, zeebster colasanti
+  Thank you to the following residents for helping to ensure that this is the best version yet: Aimee Trescothick, Alexandrea Fride, Amber DeCuir, Bocan Undercroft, Boroondas Gupte, Brandon Shinobu, Bri Gufler, Buckaroo Mu, Celierra Darling, Christos Atlantis, Coder Kas, Cummere mayo, Dirk Talamasca, Drew Dwi, Ellla McMahon, Erinyse Planer, Eyana Yohkoh, Ezian Ecksol, faron karu, fenoe low, Gellan Glenelg, Harleen Gretzky, Holger Gilruth, Iustinian Tomsen, Jacek Antonell, Jim Kupferberg, Joeseph Albanese, Kirstenlee Cinquetti, lea Parnall, Lex Neva, Lilly Zenovka, Lim Catteneo, McCabe Maxsted, Minakothegothicgeisha Kamachi, Moon Metty, neofilo aabye, Neutron Chesnokov, Nomad Ingwer, norritt Xi, Opensource Obscure, Oracle Weatherwax, Pabl0 Roffo, Peyton Aleixandre, Phli Foxchase, Psi Merlin, Selena Beale, Sheet Spotter, Shibari Twine, Silver Key, Simon Kline, Stacy Wombat, Sugarcult Dagger, Tayra dagostino, ThaBiGGDoGG Richez, tx Oh, Wundur Primbee, Yuu Nakamichi
 
   3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion
   APR Copyright (C) 2000-2004 The Apache Software Foundation
diff --git a/indra/newview/skins/default/xui/en-us/floater_about_land.xml b/indra/newview/skins/default/xui/en-us/floater_about_land.xml
index 0b4b37c..87aea05 100644
--- a/indra/newview/skins/default/xui/en-us/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_about_land.xml
@@ -467,7 +467,7 @@ Go to World menu > About Land or select another parcel to show its details.
 				<column name="online_status" width="-1" />
 				<column name="name" dynamicwidth="true" label="Name" />
 				<column name="count" label="Count" width="70" />
-				<column label="Most Recent" width="160" />
+				<column name="mostrecent" label="Most Recent" width="160" />
 			</name_list>
 		</panel>
 		<panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml b/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
index ce6d35b..67bfd0c 100644
--- a/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_chat_bar.xml
@@ -29,8 +29,6 @@
 	</flyout_button>
 	<combo_box allow_text_entry="false" bottom="-23" follows="right|bottom" height="20"
 	     label="Gestures" left_delta="85" max_chars="20" name="Gesture" width="90">
-		<combo_item name="Gestures">
-			Gestures
-		</combo_item>
-	</combo_box>
+  </combo_box>
+  <string name="gesture_label">Gestures</string>
 </panel>
diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
index 3648ce6..f784999 100644
--- a/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
@@ -176,6 +176,9 @@
 		<combo_item type="string" length="1" enabled="true" name="(Korean)" value="ko">
 			한국어 (Korean) - Beta
 		</combo_item>
+		<combo_item type="string" length="1" enabled="true" name="Danish" value="da">
+			Dansk (Danish) - Beta
+		</combo_item>
 		<combo_item type="string" length="1" enabled="true" name="Portugese" value="pt">
 			Portugués (Portuguese) - Beta
 		</combo_item>
diff --git a/indra/newview/skins/default/xui/fr/alerts.xml b/indra/newview/skins/default/xui/fr/alerts.xml
index 1fd3bba..7423a43 100644
--- a/indra/newview/skins/default/xui/fr/alerts.xml
+++ b/indra/newview/skins/default/xui/fr/alerts.xml
@@ -216,10 +216,10 @@ Souhaitez-vous accorder des droits d&apos;édition aux résidents selectionnés
 [WANT_APPLY_MESSAGE]
 		</message>
 		<option name="ApplyChanges">
-			Appliquer les changements
+			Enregistrer les modifications
 		</option>
 		<option name="IgnoreChanges">
-			Ignorer les changements
+			Ignorer les modifications
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -260,7 +260,7 @@ choisir un autre nom.
 	</alert>
 	<alert name="MustSpecifyGroupNoticeSubject">
 		<message name="message">
-			Pour envoyer une notification au groupe, vous devez indiquer un sujet.
+			Pour envoyer une notice au groupe, vous devez indiquer un sujet.
 		</message>
 		<option name="OK">
 			OK
@@ -375,9 +375,18 @@ Aller sur le site de Second Life pour avoir plus d&apos;informations sur les par
 	<alert name="ClickWebProfileHelpAvatar">
 		<message name="message">
 			Si ce résident a défini une URL de profil web, vous pouvez :
- * cliquer sur Charger pour charger la page avec le navigateur web incorporé ;
- * cliquer sur Charger &gt; Dans un navigateur externe, pour afficher la page dans un navigateur externe.
- Pour retourner au profil web du résident, cliquez sur Charger &gt; URL du domicile.
+ * Cliquer sur Charger pour afficher la page dans cet onglet ;
+ * Cliquer sur Charger &amp;gt; Dans un navigateur externe, pour afficher la page dans votre navigateur par défaut ;
+ * Cliquer sur Charger &amp;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.
+		</message>
+	</alert>
+	<alert name="ClickWebProfileNoWebHelpAvatar">
+		<message name="message">
+			Si ce résident a défini une URL de profil web, vous pouvez :
+ * Cliquer sur Ouvrir pour afficher la page dans votre navigateur par défaut.
  
 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.
@@ -451,7 +460,7 @@ Voulez-vous continuer ?
 	<alert name="JoinGroupCannotAfford">
 		<message name="message">
 			Rejoindre ce groupe coûte [COST] L$.
-Votre solde est insuffisant.
+Vous n&apos;avez pas suffisamment de L$ pour rejoindre ce groupe.
 		</message>
 	</alert>
 	<alert name="LandBuyPass">
@@ -688,14 +697,6 @@ Ce dossier ne contient pas d&apos;habits, de parties du corps ni de pièces join
 			Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
 		</message>
 	</alert>
-	<alert name="MustHaveAccountToLogInNoLinks">
-		<message name="message">
-			Pour vous connecter sur [SECOND_LIFE], vous devez avoir un compte.
-		</message>
-		<option name="OK">
-			Fermer
-		</option>
-	</alert>
 	<alert name="MustHaveAccountToLogIn">
 		<message name="message">
 			Oups! Vous avez oublié de fournir certaines informations.
@@ -712,8 +713,8 @@ Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en crée
 	</alert>
 	<alert name="AddClassified">
 		<message name="message">
-			Les petites annonces sont publiées dans la section Petites annonces sous Recherche, pour une durée d&apos;une semaine.
-Rédigez votre annonce, puis cliquez sur Publier...pour l&apos;ajouter à la liste des annonces.
+			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.
 		</message>
@@ -1537,12 +1538,12 @@ Assurez-vous que le fichier a l&apos;extension correcte.
 	</alert>
 	<alert name="InsufficientFundsToUploadFile">
 		<message name="message">
-			Fonds insuffisants pour uploader [FILE] : il vous faut L$[COST], votre solde est de L$[BALANCE]
+			Vous n&apos;avez pas suffisamment de L$ pour charger le fichier : le chargement coûte [COST] L$ et votre solde est de [BALANCE] L$
 		</message>
 	</alert>
 	<alert name="InsufficientFundsToFinishUpload">
 		<message name="message">
-			Fonds insuffisants pour terminer le téléchargement de [FILE] : il vous faut L$[COST] et votre solde est de L$[BALANCE]
+			Vous n&apos;avez pas suffisamment de L$ pour finir de charger le fichier [FILE] : le chargement coûte [COST] L$ et votre solde est de [BALANCE] L$
 		</message>
 	</alert>
 	<alert name="CannotUploadReason">
@@ -2026,13 +2027,15 @@ Vous n&apos;avez pas la permission d&apos;acheter de terrain pour votre groupe.
 
 Proposer à [NAME] de devenir votre ami(e) ?
 		</message>
+		<editline name="editline">
+			Voulez-vous être mon ami(e) ?
+		</editline>
 		<option name="Offer">
 			OK
 		</option>
 		<option name="Cancel">
 			Annuler
 		</option>
-		Voulez-vous être mon ami ?
 	</alert>
 	<alert name="AddFriendWithMessage" title="Devenir amis">
 		<message name="message">
@@ -2360,11 +2363,6 @@ pour des conseils et un lien vers la page web d&apos;état du service.
 			Aide
 		</option>
 	</alert>
-	<alert name="ErrorMessage">
-		<message name="message">
-			[ERROR_MESSAGE]
-		</message>
-	</alert>
 	<alert name="AvatarMoved">
 		<message name="message">
 			L&apos;emplacement [TYPE] n&apos;est pas disponible actuellement. [HELP] 
@@ -2443,7 +2441,7 @@ Vous pourrez revenir sur votre décision plus tard.
 	</alert>
 	<alert name="NotEnoughCurrency">
 		<message name="message">
-			[NAME]  [PRICE] L$ Vous n&apos;avez pas suffisamment d&apos;argent pour cela.
+			[NAME] [PRICE] L$ Vous n&apos;avez pas suffisamment de L$ pour faire cela.
 		</message>
 	</alert>
 	<alert name="GrantedModifyRights">
@@ -2933,10 +2931,10 @@ dans le menu &apos;Edition&apos;.
 [INVITE]
 		</message>
 		<option name="Join">
-			Fusionner
+			Rejoindre
 		</option>
 		<option name="Decline">
-			Décliner
+			Refuser
 		</option>
 	</alert>
 	<alert name="KickUser">
@@ -3052,6 +3050,7 @@ dans le menu &apos;Edition&apos;.
 		<message name="message">
 			Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine.
 		</message>
+		<editline name="editline"/>
 		<option name="OK">
 			OK
 		</option>
@@ -3094,10 +3093,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3108,10 +3107,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Supprimer de la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3119,13 +3118,13 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 	</alert>
 	<alert name="EstateAllowedGroupAdd" title="Choisir le domaine">
 		<message name="message">
-			Ajouter à la liste des résidents autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
+			Ajouter à la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3136,10 +3135,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Supprimer de la liste des groupes autorisés uniquement pour ce domaine ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3150,10 +3149,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Refuser l&apos;accès à ce domaine uniquement ou à [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3164,10 +3163,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Supprimer ce résident de la liste des résidents bannis pour ce domaine uniquement ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3178,10 +3177,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Ajouter un gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3192,10 +3191,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Supprimer le gérant de domaine pour ce domaine uniquement ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			cous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3206,10 +3205,10 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po
 			Modifier le message du règlement pour ce domaine uniquement ou pour [ALL_ESTATES] ?
 		</message>
 		<option name="ThisEstate">
-			ce domaine
+			Ce domaine
 		</option>
 		<option name="AllEstates">
-			tous les domaines
+			Tous les domaines
 		</option>
 		<option name="Cancel">
 			Annuler
@@ -3335,6 +3334,7 @@ Publier cette petite annonce maintenant pour [AMOUNT] L$ ?
 		<message name="message">
 			Saisissez une message court qui sera envoyé à tous les résidents se trouvant actuellement dans cette région.
 		</message>
+		<editline name="editline"/>
 		<option name="OK">
 			OK
 		</option>
@@ -3358,7 +3358,7 @@ Défaut : désactivé
 	</alert>
 	<alert name="HelpRegionAllowDamage" title="Autoriser les dégâts">
 		<message name="message">
-			Si vous cohez cette case, l&apos;alerte santé est désactivée sur toutes les parcelles quels que soient les paramètres individuels de la parcelle. Si la case n&apos;est pas cochée, les propriétaires de parcelles peuvent quand même activer l&apos;alerte santé de manière individuelle sur leurs parcelles.
+			Si vous cochez cette case, l&apos;alerte santé est désactivée sur toutes les parcelles quels que soient les paramètres individuels de la parcelle. Si la case n&apos;est pas cochée, les propriétaires de parcelles peuvent quand même activer l&apos;alerte santé de manière individuelle sur leurs parcelles.
  
 Défaut : désactivé
 		</message>
@@ -3399,15 +3399,15 @@ Défaut : Désactivé
 	</alert>
 	<alert name="HelpParcelChanges" title="Fusionner/Diviser des parcelles">
 		<message name="message">
-			Cette case permet de choisir si les parcelles n&apos;appartenant pas au gérant du domaine peuvent être fusionnées ou divisées ou pas. 
+			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 il ont les pouvoirs nécessaires.
+   ou celles d&apos;un groupe dans lequel il ont les pouvoirs nécessaires.
 Si cette case est cochée :
  * Tous les propriétaires peuvent fusionner ou diviser leurs parcelles. 
- * Pour les parcelles du groupe, ceux avec les pouvoirs nécessaires
-       peuvent fusionner ou diviser les parcelles.
+ * Pour les parcelles du groupe, les résidents avec les pouvoirs nécessaires
+   peuvent fusionner ou diviser les parcelles.
  
 Défaut : Cochée
 		</message>
@@ -3588,7 +3588,7 @@ Défaut : activé
 	</alert>
 	<alert name="HelpEstateAllowDirectTeleport" title="Autoriser la téléportation directe">
 		<message name="message">
-			Lorsqu&apos;elle est cochée, cette option permet aux résidents d&apos;être téléporté à 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. 
+			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. 
  
 Défaut : désactivé
 		</message>
@@ -3596,7 +3596,7 @@ Défaut : désactivé
 	<alert name="HelpEstateAllowResident" title="Autoriser l&apos;accès">
 		<message name="message">
 			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.
+Cette option n&apos;est disponible que lorsque la case Accès public est décochée.
 		</message>
 	</alert>
 	<alert name="HelpEstateAllowGroup" title="Autoriser l&apos;accès de groupe">
@@ -3893,9 +3893,9 @@ Déplacer les objets de l&apos;inventaire ?
 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 :
+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/community/blotter.php
+http://secondlife.com/support/incidentreport.php
 		</message>
 	</alert>
 	<alert name="HelpReportAbuseEmailEO">
@@ -3986,17 +3986,17 @@ Les descriptions précises nous permettent de résoudre les bugs plus rapidement
 	<alert name="HelpReportAbuseContainsCopyright">
 		<message name="message">
 			Cher résident,
+ 
+Il semble que vous souhaitiez reporter une infraction à des droits de propriété intellectuelle. Pour signaler correctement cette infraction :
 
-Si vous signalez une infraction aux droits de propriété intellectuelle, assurez-vous de fournir les détails suivants :
-
-(1) Vous pouvez envoyer un rapport d&apos;infraction si vous pensez qu&apos;un résident exploite le système de permissions de Second Life, par exemple en utilisant CopyBot ou des outils similaires, pour enfreindre des droits de propriété intellectuelle. L&apos;équipe chargée des infractions mènera une enquête et prendra les mesures nécessaires à l&apos;encontre de toute personne non respectueuse des Conditions d&apos;utilisation et des Règles de la communauté. Néanmoins, cette équipe ignorera les requêtes au sujet du retrait de contenu se trouvant sur Second Life.
-
-(2) Pour demander à ce que du contenu soit retiré de Second Life, vous devez soumettre un rapport d&apos;infraction valide, tel que fourni dans notre règlement sur le retrait de contenu à la page suivante : http://secondlife.com/corporate/dmca.php.
+(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 permissions 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.
 
-Si vous souhaitez continuer à signaler l&apos;infraction, veuillez fermer cette fenêtre et finir de soumettre votre rapport.
+(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.
 
-Cordialement,
+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 permissions.
 
+Merci,
+ 
 Linden Lab
 		</message>
 	</alert>
@@ -4089,7 +4089,7 @@ Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
 			Êtes-vous certain de vouloir supprimer le contenu de votre dossier Objets trouvés de manière permanente ?
 		</message>
 		<ignore name="ignore">
-			Losque vous videz le dossier Objets trouvés dans vote inventaire
+			Losque vous videz le dossier Objets trouvés dans votre inventaire
 		</ignore>
 		<option name="Yes">
 			Oui
@@ -4537,4 +4537,9 @@ Voulez-vous aller sur le site de Second Life pour enregistrer ces informations 
 			https://secondlife.com/account/
 		</url>
 	</alert>
+	<alert name="MissingString">
+		<message name="message">
+			The string [STRING_NAME] is missing from strings.xml
+		</message>
+	</alert>
 </alerts>
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 736bf90..6c364a6 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -5,9 +5,11 @@
 			<text length="1" name="Name:" type="string">
 				Nom :
 			</text>
+			<line_editor name="Name"/>
 			<text length="1" name="Description:" type="string">
 				Description :
 			</text>
+			<text_editor name="Description"/>
 			<text length="1" name="Owner:" type="string">
 				Propriétaire :
 			</text>
@@ -18,10 +20,10 @@
 			<text length="1" name="Group:" type="string">
 				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 contib" tool_tip="Lorsque le terrain est cédé au groupe, la contribution du précédent propriétaire suffit à l&apos;entretenir."/>
 			<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 length="1" name="For Sale:" type="string">
 				À vendre :
@@ -32,6 +34,7 @@
 			<text length="1" name="For Sale: Price L$[PRICE]." type="string">
 				Prix : [PRICE] L$.
 			</text>
+			<text name="SalePending"/>
 			<button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/>
 			<text length="1" name="For sale to" type="string">
 				À vendre à : [BUYER]
@@ -44,7 +47,7 @@
 			</text>
 			<button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" name="Cancel Land Sale"/>
 			<text length="1" name="Claimed:" type="string">
-				Réclamée :
+				Acquis le :
 			</text>
 			<text length="1" name="DateClaimText" type="string">
 				Tue Aug 15 13:47:25 2006
@@ -65,14 +68,14 @@
 			<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..." name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain."/>
 			<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="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."/>
-			<text name="new users only">
+			<string name="new users only">
 				Nouveaux utilisateurs uniquement
-			</text>
-			<text name="anyone">
+			</string>
+			<string name="anyone">
 				Tout le monde
-			</text>
+			</string>
 			<string name="area_text">
 				Surface
 			</string>
@@ -139,25 +142,25 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 			<text_editor length="1" name="covenant_editor" type="string">
 				Il n&apos;y a aucun règlement pour ce domaine.
 			</text_editor>
-			<text name="can_resell">
+			<string name="can_resell">
 				Le terrain acheté dans cette région peut être revendu.
-			</text>
-			<text name="can_not_resell">
+			</string>
+			<string name="can_not_resell">
 				Le terrain acheté dans cette région ne peut pas être revendu.
-			</text>
-			<text name="can_change">
+			</string>
+			<string name="can_change">
 				Le terrain acheté dans cette région peut être fusionné ou divisé.
-			</text>
-			<text name="can_not_change">
+			</string>
+			<string name="can_not_change">
 				Le terrain acheté dans cette région ne peut pas être fusionné ou divisé.
-			</text>
+			</string>
 		</panel>
 		<panel label="Objets" name="land_objects_panel">
 			<text name="parcel_object_bonus">
 				Facteur Bonus Objets : [BONUS]
 			</text>
 			<text length="1" name="Simulator primitive usage:" type="string">
-				Prims utilisés sur le sim :
+				Prims utilisés sur la parcelle :
 			</text>
 			<text name="objects_available">
 				[COUNT] sur [MAX] ([AVAILABLE] disponibles)
@@ -210,22 +213,18 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 			<text length="1" name="selected_objects_text" type="string">
 				[COUNT]
 			</text>
-			<text length="1" name="Autoreturn other resident&amp;apos;s objects (minutes, 0 for off):" type="string">
-				Renvoi automatique des objets appartenant aux autres résidents (minutes, 0 pour désactiver):
-			</text>
 			<text name="Autoreturn">
 				Renvoi automatique des objets d&apos;autres résidents (minutes, 0 pour désactiver) :
 			</text>
+			<line_editor name="clean other time"/>
 			<text length="1" name="Object Owners:" type="string">
 				Propriétaires :
 			</text>
 			<button label="Rafraîchir la liste" label_selected="Rafraîchir la liste" name="Refresh List"/>
 			<button label="Renvoyer les objets..." label_selected="Renvoyer les objets..." name="Return objects..."/>
-			<button label="" label_selected="" name="Type" tool_tip="Trier par type"/>
-			<button label="Nom" label_selected="Nom" name="Name" tool_tip="Trier par nom"/>
-			<button label="Trafic" label_selected="Trafic" name="Count" tool_tip="Trier par trafic"/>
 			<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"/>
 			</name_list>
@@ -234,12 +233,13 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 			<text length="1" name="allow_label" type="string">
 				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 name="allow_label2">
 				Créer des objets :
 			</text>
 			<check_box label="Tous les résidents" name="edit objects check"/>
-			<check_box label="Modifier le terrain" name="edit land check"/>
-			<check_box label="Créer des repères" name="check landmark"/>
 			<check_box label="Groupe" name="edit group objects check"/>
 			<text name="allow_label3">
 				Laisser entrer des objets :
@@ -249,14 +249,13 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 			<text name="allow_label4">
 				Exécuter des scripts :
 			</text>
-			<check_box label="Groupe" name="check group scripts"/>
-			<check_box label="Voler" name="check fly"/>
 			<check_box label="Tous les résidents" name="check other scripts"/>
+			<check_box label="Groupe" name="check group scripts"/>
 			<text length="1" name="land_options_label" type="string">
 				Options du terrain :
 			</text>
-			<check_box label="Sécurisé (pas de dégâts)" name="check safe"/>
-			<check_box label="Interdire les bousculades" name="PushRestrictCheck" tool_tip="llPushObject ne fonctionne que sur les scripts du propriétaire de la parcelle ou sur les scripts où la personne qui bouscule est aussi la propriétaire du script."/>
+			<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 label="Pas de bousculades" 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 label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
 			<combo_box name="land category">
 				<combo_item name="AnyCategory">
@@ -284,7 +283,7 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 					Endroit favori
 				</combo_item>
 				<combo_item name="NewcomerFriendly">
-					Convivial pour les nouveaux
+					Accueil pour les nouveaux
 				</combo_item>
 				<combo_item name="Parks&amp;Nature">
 					Parcs et Nature
@@ -299,23 +298,19 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 					Autre
 				</combo_item>
 			</combo_box>
-			<check_box label="Publier liste sur le web" name="PublishCheck" tool_tip="Publiez vos informations de parcelle sur le web."/>
-			<check_box label="Contenu pour adultes" name="MatureCheck" tool_tip="Les infos sur votre parcelle, ou le contenu de cette dernière, sont à caractère adulte."/>
 			<button label="?" label_selected="?" name="?"/>
+			<check_box label="Contenu pour adultes" name="MatureCheck" tool_tip="Les infos sur votre parcelle, ou le contenu de cette dernière, sont à caractère adulte."/>
 			<text length="1" name="Snapshot:" type="string">
 				Photo :
 			</text>
 			<texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
-			<text length="1" name="Landing Point: (none)" type="string">
-				Point d&apos;atterrissage : (aucun)
-			</text>
 			<text name="landing_point">
 				Lieu d&apos;arrivée : [LANDING]
 			</text>
 			<string name="landing_point_none">
 				(aucun)
 			</string>
-			<button label="Définir" label_selected="Définir" name="Set" tool_tip="Définir le lieu d&apos;arrivée de l&apos;avatar sur votre position actuelle. ll doit se trouver sur cette parcelle."/>
+			<button 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 label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d&apos;arrivée."/>
 			<text length="1" name="Teleport Routing: " type="string">
 				Règles de téléportation :
@@ -332,25 +327,32 @@ Allez dans le menu Monde &gt; À propos du terrain ou sélectionnez une autre pa
 				</combo_item>
 			</combo_box>
 			<string name="push_restrict_text">
-				Interdire les bousculades
+				Pas de bousculades
 			</string>
 			<string name="push_restrict_region_text">
-				Interdire les bousculades (passer outre les règles de la région)
+				Pas de bousculades (les règles de la région priment)
 			</string>
 		</panel>
-		<panel label="Média" name="land_media_panel">
+		<panel label="Médias" name="land_media_panel">
 			<text name="with media:">
 				Type de média :
 			</text>
 			<combo_box 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:">
 				URL du média :
 			</text>
+			<line_editor name="media_url"/>
 			<button label="Définir..." label_selected="Définir..." name="set_media_url"/>
 			<text name="Description:">
 				Description :
 			</text>
 			<line_editor name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/>
+			<text length="1" name="Media texture:" type="string">
+				Remplacer
+la texture :
+			</text>
+			<texture_picker label="" 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).
@@ -359,6 +361,7 @@ la page web quand vous cliquez sur la flèche Jouer).
 				Options
 média :
 			</text>
+			<check_box label="Échelle automatique" 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" 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."/>
@@ -373,25 +376,11 @@ média :
 			<text name="MusicURL:">
 				URL de la musique :
 			</text>
+			<line_editor name="music_url"/>
 			<text name="Sound:">
 				Son :
 			</text>
 			<check_box label="Limiter le son spatial à cette parcelle" name="check sound local"/>
-			<text length="1" name="Music URL:" type="string">
-				URL du flux :
-			</text>
-			<text length="1" name="Media texture:" type="string">
-				Remplacer
-la texture :
-			</text>
-			<text length="1" name="Replace this texture:" type="string">
-				Remplacer cette texture :
-			</text>
-			<texture_picker label="" name="media texture" tool_tip="Cliquez pour sélectionner une image"/>
-			<text length="1" name="with content from this URL:" type="string">
-				par du contenu situé à l&apos;URL suivante :
-			</text>
-			<check_box label="Échelle automatique" 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 name="Voice settings:">
 				Voix :
 			</text>
@@ -403,7 +392,7 @@ la texture :
 					Utiliser un canal spatial privé
 				</radio_item>
 				<radio_item name="Disabled">
-					Désactiver les canaux spatiaux audios sur cette parcelle
+					Désactiver les canaux spatiaux audios
 				</radio_item>
 			</radio_group>
 		</panel>
@@ -413,21 +402,18 @@ la texture :
 			</text>
 			<check_box label="Autoriser l&apos;accès public" name="public_access"/>
 			<text name="Only Allow">
-				Bloquer l&apos;accès :
+				Bloquer l&apos;accès aux résidents :
 			</text>
-			<check_box label="Aux résidents 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="Aux résidents 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."/>
+			<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."/>
 			<string name="estate_override">
 				Au moins une de ces options est définie au niveau du domaine.
 			</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="Avatars : (0 dans la liste, 300 max)" name="AccessCheck"/>
-			<button label="Ajouter..." label_selected="Ajouter..." name="Add..."/>
-			<button label="Retirer" label_selected="Retirer" name="Remove"/>
 			<check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/>
 			<combo_box name="pass_combo">
 				<combo_item name="Anyone">
-					N&apos;importe qui
+					Tout le monde
 				</combo_item>
 				<combo_item name="Group">
 					Groupe
@@ -448,16 +434,5 @@ la texture :
 			<button label="Ajouter..." label_selected="Ajouter..." name="add_banned"/>
 			<button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
 		</panel>
-		<panel label="Bannir" name="land_ban_panel">
-			<check_box label="Bannir les avatars suivants : (0 dans la liste, 300 max)" name="LandBanCheck"/>
-			<button label="Ajouter..." label_selected="Ajouter..." name="Add..."/>
-			<button label="Retirer" label_selected="Retirer" name="Remove"/>
-			<text length="1" name="Deny by Payment Status:" type="string">
-				Refuser selon les infos de paiement :
-			</text>
-			<check_box label="Refuser sans infos de paiement enregistrées" name="DenyAnonymousCheck"/>
-			<check_box label="Refuser avec infos de paiement enregistrées" name="DenyIdentifiedCheck"/>
-			<check_box label="Refuser avec infos de paiement utilisées" name="DenyTransactedCheck"/>
-		</panel>
 	</tab_container>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml
new file mode 100644
index 0000000..06bcdee
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_beacons.xml
@@ -0,0 +1,15 @@
+<?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 des particules" name="particles"/>
+		<check_box label="Montrer les surbrillances" name="highlights"/>
+		<check_box label="Montrer les balises" name="beacons"/>
+		<text name="beacon_width_label">
+			Largeur de la balise :
+		</text>
+	</panel>
+</floater>
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 a8a88df..bbede9d 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="buy land" title="Acheter le terrain">
 	<text name="region_name_label">
 		Région :
@@ -19,7 +19,7 @@
 		(inconnu)
 	</text>
 	<text name="resellable_changeable_label">
-		Terrains achetés dans cette région :
+		Terrain acheté dans cette région :
 	</text>
 	<text name="resellable_clause">
 		Le terrain acheté dans cette région peut être revendu ou pas.
@@ -31,7 +31,7 @@
 		Vous devez accepter le règlement du domaine :
 	</text>
 	<text_editor name="covenant_editor">
-		Chargement en cours...
+		Chargement...
 	</text_editor>
 	<check_box label="J&apos;accepte le règlement ci-dessus." name="agree_covenant"/>
 	<text name="info_parcel_label">
@@ -205,7 +205,7 @@ peut-être chercher une parcelle Premier Terrain moins chère.
 		Ce terrain est en solde et les frais associés sont de [AMOUNT]/m².
 	</text>
 	<text name="meters_supports_object">
-		[AMOUNT] m² peuvent prendre en charge [AMOUNT2] objets
+		[AMOUNT] m² peuvent contenir [AMOUNT2] prims
 	</text>
 	<text name="sold_with_objects">
 		vendu avec objets
diff --git a/indra/newview/skins/default/xui/fr/floater_chat_history.xml b/indra/newview/skins/default/xui/fr/floater_chat_history.xml
index 705bf97..93741fc 100644
--- a/indra/newview/skins/default/xui/fr/floater_chat_history.xml
+++ b/indra/newview/skins/default/xui/fr/floater_chat_history.xml
@@ -42,6 +42,9 @@
 					<flyout_button_item name="say_item">
 						Dire
 					</flyout_button_item>
+					<flyout_button_item name="whisper_item">
+						Chuchoter
+					</flyout_button_item>
 				</flyout_button>
 			</panel>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_directory.xml b/indra/newview/skins/default/xui/fr/floater_directory.xml
index b5df2db..3b23d28 100644
--- a/indra/newview/skins/default/xui/fr/floater_directory.xml
+++ b/indra/newview/skins/default/xui/fr/floater_directory.xml
@@ -239,13 +239,13 @@ pour adultes" left="551" name="incmature"/>
 			</combo_box>
 			<combo_box name="rating" width="150">
 				<combo_item name="PG&amp;Mature">
-					Tout public et Adultes
+					Tout public et Adulte
 				</combo_item>
 				<combo_item name="PGonly">
 					Tout public uniquement
 				</combo_item>
 				<combo_item name="Matureonly">
-					Adultes uniquement
+					Adulte uniquement
 				</combo_item>
 			</combo_box>
 			<check_box label="Prix &lt;= L$" left="157" name="pricecheck"/>
@@ -278,7 +278,7 @@ et cliquez sur le nom de l&apos;endroit dans la barre de titre.
 				Trouver :
 			</text>
 			<line_editor left_delta="51" name="name" width="128"/>
-			<check_box label="Inclure les parcelles avec du contenu Adultes" name="incmature"/>
+			<check_box label="Inclure les parcelles avec du contenu Adulte" name="incmature"/>
 			<combo_box left="195" name="Category" width="170">
 				<combo_item name="AnyCategory">
 					Toutes catégories
@@ -287,7 +287,7 @@ et cliquez sur le nom de l&apos;endroit dans la barre de titre.
 					Appartenant aux Lindens
 				</combo_item>
 				<combo_item name="Adult">
-					Adultes
+					Adulte
 				</combo_item>
 				<combo_item name="Arts&amp;Culture">
 					Art et Culture
diff --git a/indra/newview/skins/default/xui/fr/floater_group_info.xml b/indra/newview/skins/default/xui/fr/floater_group_info.xml
index ac25eb0..1509c0f 100644
--- a/indra/newview/skins/default/xui/fr/floater_group_info.xml
+++ b/indra/newview/skins/default/xui/fr/floater_group_info.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groupinfo" title="Les Linden – Informations sur le groupe">
+<floater name="groupinfo" title="Les Linden – Profil du groupe">
 	<tab_container name="tab">
 		<panel label="Général" name="gen">
 			<text name="title_box">
-				Infos sur le groupe
+				Profil du groupe
 			</text>
 			<text name="txt">
 				Les groupes sont un moyen divertissant de collaborer avec vos amis.
@@ -78,7 +78,7 @@
 			<tab_container name="tab">
 				<panel label="Élection" name="recall">
 					<text name="txt">
-						Élections du groupe
+						Élections
 					</text>
 					<text name="instructions">
 						Pour commencer une nouvelle élection, cliquez sur Lancer l&apos;élection.  
@@ -171,15 +171,15 @@ Les candidats incluent tous les membres qui ne sont pas officiers.
 						jours
 					</text>
 					<text name="start_lbl">
-						Début du vote :
+						Début :
 					</text>
 					<text name="end_lbl">
-						Fin du vote :
+						Fin :
 					</text>
 				</panel>
 				<panel label="Historique" name="History">
 					<text name="txt">
-						Historique des votes du groupe
+						Historique des votes
 					</text>
 					<text name="instructions">
 						Vous pouvez afficher les anciens résultats en sélectionnant le vote et
@@ -200,7 +200,7 @@ Les candidats incluent tous les membres qui ne sont pas officiers.
 		</panel>
 		<panel label="Invitation" name="inv">
 			<text name="txt">
-				Invitations du groupe
+				Invitations
 			</text>
 			<text name="txt2">
 				Les invitations sont envoyées par messagerie instantanée.
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 87ab55f..461bd8d 100644
--- a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
@@ -26,14 +26,13 @@
 	</combo_box>
 	<spinner label="Gamma :" name="gamma"/>
 	<text left="217" name="(brightness, lower is brighter)">
-		(luminosité, valeur faible = plus lumineux, 0 = défaut)
+		(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"/>
+	<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_html.xml b/indra/newview/skins/default/xui/fr/floater_html.xml
index 9504040..73835f8 100644
--- a/indra/newview/skins/default/xui/fr/floater_html.xml
+++ b/indra/newview/skins/default/xui/fr/floater_html.xml
@@ -3,7 +3,7 @@
 	<button label="Fermer" name="close_btn" />
 	<button label="Précédente" name="back_btn" />
 	<button label="Suivante" name="forward_btn" />
-	<button label="Recharger" name="reload_btn" />
+	<button label="Rafraîchir" name="reload_btn" />
 	<button label="Arrêter" name="stop_btn" />
 	<button label="Domicile" name="home_btn" />
 	<button label="Aller" name="go_btn" />
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 f440ffd..e0ec113 100644
--- a/indra/newview/skins/default/xui/fr/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
@@ -38,7 +38,7 @@
 			Jupe
 		</combo_item>
 		<combo_item name="SculptedPrim">
-			Prim sculpté
+			Sculptie
 		</combo_item>
 	</combo_box>
 	<text name="bad_image_text">
diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml
index fcb93ae..5b95a60 100644
--- a/indra/newview/skins/default/xui/fr/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="Joystick" title="Configuration du joystick">
 	<check_box name="enable_joystick">
-		Activer le joystick :
+		Activer :
 	</check_box>
 	<spinner label="Mapping axe des X " name="JoystickAxis1" />
 	<spinner label="Mapping axe des Y" name="JoystickAxis2" />
@@ -78,6 +78,6 @@
 		Axe [NUM]
 	</string>
 	<string name="NoDevice">
-		aucun dispositif détecté
+		aucun joystick détecté
 	</string>
 </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 4695d16..505620e 100644
--- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
@@ -4,7 +4,7 @@
 		<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="Recharger" left_delta="75" name="reload"/>
+			<button label="Rafraîchir" left_delta="75" name="reload"/>
 			<combo_box left_delta="75" name="address" width="250"/>
 			<button label="OK" left_delta="255" name="go"/>
 		</layout_panel>
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 9bc587a..0de77b3 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
@@ -5,7 +5,7 @@
 		Description :
 	</text>
 	<text_editor type="string" length="1" name="Notecard Editor">
-		Chargement en cours...
+		Chargement...
 	</text_editor>
 	<string name="no_object">
 		Impossible de trouver l&apos;objet contenant cette note.
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml
index e0974f3..94783c2 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater name="preview_notecard">
 	<text_editor type="string" length="1" name="Notecard Editor">
-		Chargement en cours...
+		Chargement..
 	</text_editor>
 	<text type="string" length="1" name="desc txt">
 		Description :
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 7c6826c..1fbc727 100644
--- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
@@ -1,5 +1,7 @@
 <?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>
@@ -15,14 +17,22 @@
 	<text name="pos_title">
 		Position :
 	</text>
-	<texture_picker name="screenshot"/>
-	<check_box label="Inclure une capture d&apos;écran" name="screen_check"/>
 	<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>
@@ -48,14 +58,11 @@
 		<combo_item name="Assault__Weapons_testing_sandbox">
 			Assaut &gt; Bac à sable pour tests d&apos;armes à feu
 		</combo_item>
-		<combo_item name="Copyright_or_intellectual_property_violation">
-			Violation de droits d&apos;auteur ou de propriété intellectuelle
-		</combo_item>
 		<combo_item name="Commerce__Failure_to_deliver_product_or_service">
 			Commerce &gt; Incapacité à fournir un produit ou service
 		</combo_item>
-		<combo_item name="Disclosure__First_Life_information">
-			Divulgation &gt; Informations sur la vie réelle (First Life)
+		<combo_item name="Disclosure__Real_world_information">
+			Divulgation &gt; Informations sur la vie réelle
 		</combo_item>
 		<combo_item name="Disclosure__Remotely_monitoring chat">
 			Divulgation &gt; Écoute d&apos;un chat à distance
@@ -120,6 +127,12 @@
 		<combo_item name="Indecency__Mature_content_in_PG_region">
 			Indécence &gt; Contenu Adultes dans une région Tout public
 		</combo_item>
+		<combo_item name="Intellectual_property_infringement_Content_Removal">
+			Violation de droits de propriété intellectuelle &gt; Suppression de contenu
+		</combo_item>
+		<combo_item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit">
+			Violation de droits de propriété intellectuelle &gt; CopyBot ou exploitation abusive des permissions
+		</combo_item>
 		<combo_item name="Intolerance">
 			Intolérance
 		</combo_item>
@@ -135,9 +148,6 @@
 		<combo_item name="Land__Encroachment__Trees_plants">
 			Terrain &gt; Empiètement &gt; Arbres/plantes
 		</combo_item>
-		<combo_item name="Trademark_violation">
-			Violation des droits de marque
-		</combo_item>
 		<combo_item name="Wagering_gambling">
 			Paris/jeux d&apos;argent
 		</combo_item>
@@ -145,16 +155,6 @@
 			Autre
 		</combo_item>
 	</combo_box>
-	<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="select_object_label">
-		Cliquez sur le bouton puis l&apos;objet :
-	</text>
-	<text name="object_name_label">
-		Nom :
-	</text>
-	<text name="owner_name_label" width="66">
-		Propriétaire :
-	</text>
 	<text name="abuser_name_title">
 		Nom du contrevenant :
 	</text>
@@ -178,6 +178,6 @@ que possible. Pensez à indiquer un objet.
 		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"/>
+	<button label="Signaler une infraction" label_selected="Signaler une infraction" name="send_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml
index 9011db5..8bc8464 100644
--- a/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml
+++ b/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml
@@ -2,7 +2,7 @@
 <panel name="script panel">
 	<button label="Enregistrer" label_selected="Enregistrer" name="Save_btn" />
 	<text_editor type="string" length="1" name="Script Editor">
-		Chargement en cours...
+		Chargement...
 	</text_editor>
 	<combo_box label="Insérer..." name="Insert..." />
 	<menu_bar name="script_menu">
@@ -29,7 +29,7 @@
 		</menu>
 	</menu_bar>
 	<string name="loading">
-		Chargement en cours...
+		Chargement...
 	</string>
 	<string name="can_not_view">
 		Vous n&apos;êtes pas autorisé à afficher ce script.
diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml
index 0cc1980..bbc6a82 100644
--- a/indra/newview/skins/default/xui/fr/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/fr/floater_telehub.xml
@@ -15,7 +15,7 @@
 	<button label="Connecter le téléhub" name="connect_btn" />
 	<button label="Déconnecter" name="disconnect_btn" />
 	<text name="spawn_points_text">
-		Points d&apos;apparition (positions, pas objets):
+		Points d&apos;apparition (positions, pas objets) :
 	</text>
 	<button label="Ajouter point" name="add_spawn_point_btn" />
 	<button label="Supprimer point" name="remove_spawn_point_btn" />
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 33ddbfa..a9b8c9b 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -39,7 +39,8 @@
 		Axe :
 	</text>
 	<text name="text status">
-		Faîtes glisser pour déplacer, Maj-faire glisser pour copier.
+		Faîtes glisser pour déplacer, Maj-faire glisser pour
+		copier.
 	</text>
 	<combo_box name="combobox grid mode">
 		<combo_item name="World">
@@ -451,7 +452,7 @@
 			<text name="glow label">
 				Rayonnement
 			</text>
-			<check_box label="Rendre lumineux" name="checkbox fullbright"/>
+			<check_box label="Lumineux" name="checkbox fullbright"/>
 			<text name="tex gen">
 				Application
 			</text>
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 7ef4a60..eaf1dab 100644
--- a/indra/newview/skins/default/xui/fr/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="top_objects" title="en cours de chargement...">
 	<text name="title_text">
-		Chargement en cours...
+		Chargement...
 	</text>
 	<scroll_list name="objects_list">
 		<column label="Score" name="score"/>
@@ -40,7 +40,7 @@
 		Objets souvent responsables de collision
 	</text>
 	<text name="top_colliders_text">
-		[COUNT] objets le plus souvent responsables de collisions
+		[COUNT] objets souvent responsables de collisions
 	</text>
 	<text name="colliders_score_label">
 		Score
diff --git a/indra/newview/skins/default/xui/fr/floater_url_entry.xml b/indra/newview/skins/default/xui/fr/floater_url_entry.xml
index b744bf1..1e100aa 100644
--- a/indra/newview/skins/default/xui/fr/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/fr/floater_url_entry.xml
@@ -7,6 +7,6 @@
 	<button label="Annuler" name="cancel_btn" />
 	<button label="Effacer" name="clear_btn" />
 	<text name="loading_label">
-		Chargement en cours...
+		Chargement...
 	</text>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml b/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
index c6d5ff6..f3d6832 100644
--- a/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
+++ b/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
@@ -8,7 +8,7 @@
 	<pie_menu label="Plus &gt;" name="More &gt;">
 		<menu_item_call label="Geler..." name="Freeze..."/>
 		<menu_item_call label="Donner une carte" name="Give Card"/>
-		<menu_item_call label="Invitation de groupe..." name="Invite..."/>
+		<menu_item_call label="Inviter dans le groupe..." name="Invite..."/>
 		<menu_item_call label="Expulser..." name="Eject..."/>
 		<menu_item_call label="Débugger..." name="Debug..."/>
 		<menu_item_call label="Inspecter" name="Object Inspect"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 4746d82..92365ca 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -15,20 +15,9 @@
 		<menu_item_call label="Prendre une photo" name="Take Snapshot"/>
 		<menu_item_call label="Enregistrer la photo sur le disque" name="Snapshot to Disk" shortcut="control|shift|X"/>
 		<menu_item_separator label="-----------" name="separator4"/>
-		<menu label="Définir taille de la fenêtre" name="Set Window Size">
-			<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
-			<menu_item_call label="320x240" name="320x240"/>
-			<menu_item_call label="640x480" name="640x480"/>
-			<menu_item_call label="800x600" name="800x600"/>
-			<menu_item_separator label="-----------" name="separator"/>
-			<menu_item_call label="720x480 (NTSC)" name="720x480 (NTSC)"/>
-			<menu_item_call label="768x576 (PAL)" name="768x576 (PAL)"/>
-		</menu>
-		<menu_item_separator label="-----------" name="separator5"/>
 		<menu_item_call label="Quitter" name="Quit"/>
 	</menu>
 	<menu label="Édition" name="Edit">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 		<menu_item_call label="Annuler" name="Undo"/>
 		<menu_item_call label="Recommencer" name="Redo"/>
 		<menu_item_separator label="-----------" name="separator"/>
@@ -47,7 +36,6 @@
 		<menu label="Attacher l&apos;objet" name="Attach Object"/>
 		<menu label="Détacher l&apos;objet" name="Detach Object"/>
 		<menu label="Enlever mes habits" name="Take Off Clothing">
-			<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 			<menu_item_call label="Chemise" name="Shirt"/>
 			<menu_item_call label="Pantalon" name="Pants"/>
 			<menu_item_call label="Chaussures" name="Shoes"/>
@@ -94,52 +82,25 @@
 		<menu_item_check label="Propriétaires fonciers" name="Land Owners"/>
 		<menu_item_separator label="-----------" name="separator4"/>
 		<menu label="Infobulles" name="Hover Tips">
-			<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 			<menu_item_check label="Affichez les astuces" name="Show Tips"/>
 			<menu_item_separator label="-----------" name="separator"/>
 			<menu_item_check label="Astuces sur les terrains" name="Land Tips"/>
 			<menu_item_check label="Astuces sur tous les objets" name="Tips On All Objects"/>
 		</menu>
-		<menu_item_check label="Alt affiche les propriétés physiques" name="Alt Shows Physical"/>
 		<menu_item_check label="Voir les objets invisibles" name="Highlight Transparent"/>
-		<menu_item_check label="Balises toujours activées" name="Beacons Always On"/>
-		<menu label="Balises" name="Beacons">
-			<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
-			<menu_item_check label="Objets scriptés avec Toucher uniquement" name="Scripted Objects With Touch Only"/>
-			<menu_item_check label="Objets scriptés" name="Scripted Objects"/>
-			<menu_item_check label="Objets physiques" name="Physical Objects"/>
-			<menu_item_check label="Sources sonores" name="Sound Sources"/>
-			<menu_item_check label="Sources des particules" name="Particle Sources"/>
-			<menu_item_separator label="-----------" name="separator"/>
-			<menu_item_check label="Montrer les surbrillances" name="Render Highlights"/>
-			<menu_item_check label="Montrer les balises" name="Render Beacons"/>
-			<menu_item_separator label="-----------" name="separator2"/>
-			<menu_item_check label="Masquer les particules" name="Hide Particles"/>
-			<menu_item_separator label="-----------" name="separator3"/>
-			<menu label="Largeur de la balise" name="Beacon Width">
-				<menu_item_call label="1" name="Beacon Width 1"/>
-				<menu_item_call label="4" name="Beacon Width 4"/>
-				<menu_item_call label="16" name="Beacon Width 16"/>
-				<menu_item_call label="32" name="Beacon Width 32"/>
-			</menu>
-		</menu>
+		<menu_item_check label="Balises" name="beacons"/>
+		<menu_item_check label="Masquer les particules" name="Hide Particles"/>
 		<menu_item_check label="Afficher les HUD" name="Show HUD Attachments"/>
 		<menu_item_separator label="-----------" name="separator5"/>
 		<menu_item_call label="Zoomer" name="Zoom In"/>
 		<menu_item_call label="Zoom par défaut" name="Zoom Default"/>
 		<menu_item_call label="Zoomer en arrière" name="Zoom Out"/>
 		<menu_item_separator label="-----------" name="separator6"/>
-		<menu label="Plus" name="More">
-			<menu_item_call label="Passer en plein écran" name="Toggle Fullscreen"/>
-			<menu_item_call label="Définir la taille de l&apos;interface à sa valeur par défaut" name="Set UI Size to Default"/>
-		</menu>
 		<menu_item_call label="Activer/Quitter le plein écran" name="Toggle Fullscreen"/>
 		<menu_item_call label="Taille de l&apos;interface par défaut" name="Set UI Size to Default"/>
 	</menu>
 	<menu label="Monde" name="World">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 		<menu_item_call label="Chat" name="Chat"/>
-		<menu_item_call label="Démarrer le geste" name="Start Gesture"/>
 		<menu_item_check label="Toujours courir" name="Always Run"/>
 		<menu_item_check label="Voler" name="Fly" shortcut="F"/>
 		<menu_item_separator label="-----------" name="separator"/>
@@ -162,15 +123,6 @@
 		<menu_item_call label="Acheter le terrain..." name="Buy Land..."/>
 		<menu_item_call label="Région et domaine..." name="Region/Estate..."/>
 		<menu_item_separator label="-----------" name="separator6"/>
-		<menu label="Forcer le soleil" name="Force Sun">
-			<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
-			<menu_item_call label="Soleil Levant" name="Sunrise"/>
-			<menu_item_call label="Midi" name="Noon"/>
-			<menu_item_call label="Soleil Couchant" name="Sunset"/>
-			<menu_item_call label="Minuit" name="Midnight"/>
-			<menu_item_separator label="-----------" name="separator"/>
-			<menu_item_call label="Revenir aux valeurs par défaut de la région" name="Revert to Region Default"/>
-		</menu>
 		<menu label="Environnement" name="Environment Settings">
 			<menu_item_call label="Aube" name="Sunrise"/>
 			<menu_item_call label="Milieu de journée" name="Noon"/>
@@ -182,9 +134,7 @@
 		</menu>
 	</menu>
 	<menu label="Outils" name="Tools">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 		<menu label="Sélectionner un outil" name="Select Tool">
-			<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 			<menu_item_call label="Mise au point" name="Focus"/>
 			<menu_item_call label="Déplacer" name="Move"/>
 			<menu_item_call label="Éditer" name="Edit"/>
@@ -208,7 +158,6 @@
 		<menu_item_call label="Lier" name="Link"/>
 		<menu_item_call label="Délier" name="Unlink"/>
 		<menu_item_separator label="-----------" name="separator4"/>
-		<menu_item_separator label="-----------" name="separator5"/>
 		<menu_item_call label="Mise au point sur la sélection" name="Focus on Selection"/>
 		<menu_item_call label="Zoom sur la sélection" name="Zoom to Selection"/>
 		<menu_item_call label="Acheter l&apos;objet" name="Menu Object Take"/>
@@ -217,35 +166,24 @@
 		<menu_item_call label="Remplacer l&apos;objet dans le contenu de l&apos;objet" name="Save Object Back to Object Contents"/>
 		<menu_item_separator label="-----------" name="separator6"/>
 		<menu_item_call label="Afficher la fenêtre d&apos;alertes/erreurs de script" name="Show Script Warning/Error Window"/>
-		<menu_item_call label="Recompiler les scripts dans la sélection" name="Recompile Scripts in Selection">
+		<menu label="Recompiler les scripts dans la sélection" name="Recompile Scripts in Selection">
 			<menu_item_call label="Mono" name="Mono"/>
 			<menu_item_call label="LSL" name="LSL"/>
-		</menu_item_call>
+		</menu>
 		<menu_item_call label="Réinitialiser les scripts dans la sélection" name="Reset Scripts in Selection"/>
 		<menu_item_call label="Activer les scripts dans la sélection" name="Set Scripts to Running in Selection"/>
 		<menu_item_call label="Désactiver les scripts dans la sélection" name="Set Scripts to Not Running in Selection"/>
 	</menu>
 	<menu label="Aide" name="Help">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
 		<menu_item_call label="Aide Second Life" name="Second Life Help"/>
-		<menu_item_call label="Base de connaissances…" name="Knowledge Base..."/>
-		<menu_item_call label="Aide en ligne" name="Live Help..."/>
 		<menu_item_call label="Didacticiel" name="Tutorial"/>
 		<menu_item_separator label="-----------" name="separator"/>
 		<menu_item_call label="Blog officiel des Lindens..." name="Official Linden Blog..."/>
 		<menu_item_separator label="-----------" name="separator2"/>
-		<menu_item_call label="Guide pour l&apos;écriture de scripts..." name="Scripting Guide..."/>
-		<menu_item_call label="Scripting Wiki..." name="Scripting Wiki..."/>
 		<menu_item_call label="Portail pour l&apos;écriture de scripts..." name="Scripting Portal..."/>
 		<menu_item_separator label="-----------" name="separator3"/>
-		<menu_item_call label="Message du jour..." name="Message of the Day..."/>
-		<menu_item_separator label="-----------" name="separator4"/>
 		<menu_item_call label="Signaler une infraction..." name="Report Abuse..."/>
 		<menu_item_call label="Collisions, coups et bousculades…" name="Bumps, Pushes &amp;amp; Hits..."/>
-		<menu_item_separator label="-----------" name="separator5"/>
-		<menu_item_call label="Signaler un bug..." name="Report Bug..."/>
-		<menu_item_call label="Notes de version…" name="Release Notes..."/>
-		<menu_item_separator label="-----------" name="separator6"/>
 		<menu_item_call label="Mesure du lag" name="Lag Meter"/>
 		<menu_item_separator label="-----------" name="separator7"/>
 		<menu label="Signaler des bugs" name="Bug Reporting">
diff --git a/indra/newview/skins/default/xui/fr/notify.xml b/indra/newview/skins/default/xui/fr/notify.xml
index 3a33b05..dc67179 100644
--- a/indra/newview/skins/default/xui/fr/notify.xml
+++ b/indra/newview/skins/default/xui/fr/notify.xml
@@ -379,7 +379,7 @@ Vous ne pouvez pas voler ici.
 	</notify>
 	<notify name="PushRestricted">
 		<message name="message">
-			Ce terrain est « llPushObject Restricted ».
+			Les bousculades sont interdites sur ce terrain.
 Vous ne pouvez pas pousser les autres à moins que vous soyez propriétaire de ce terrain.
 		</message>
 	</notify>
@@ -896,9 +896,9 @@ Pour activer/désactiver ce menu sous Windows, appuyez sur Ctrl-Alt-D. Sur un Ma
 	</notify>
 	<notify name="FirstSculptedPrim">
 		<message name="message">
-			Vous êtes en train d&apos;éditer un prim sculpté.  
-Pour spécifier la forme d&apos;un prim sculpté, vous devez utiliser une texture spécifique.  
-Vous trouverez des exemples de textures sculptées dans la bibliothèque de l&apos;inventaire.
+			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.  
+Vous trouverez des textures dans la bibliothèque de votre inventaire.
 		</message>
 	</notify>
 	<notify name="FirstMedia">
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar.xml b/indra/newview/skins/default/xui/fr/panel_avatar.xml
index bb49a1b..329521e 100644
--- a/indra/newview/skins/default/xui/fr/panel_avatar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="Panel Avatar">
 	<tab_container name="tab">
-		<panel label="2nd Life" name="2nd Life">
+		<panel label="2ème vie" name="2nd Life">
 			<string name="CaptionTextAcctInfo">
 				[ACCTTYPE]
 [PAYMENTINFO]
@@ -125,7 +125,7 @@
 			<button label="Créer..." label_selected="Créer..." name="New..."/>
 			<button label="Supprimer..." label_selected="Supprimer..." name="Delete..."/>
 			<text name="loading_text">
-				Chargement en cours...
+				Chargement...
 			</text>
 		</panel>
 		<panel label="Annonces" name="Classified">
@@ -135,10 +135,10 @@
 			<button label="Créer..." label_selected="Créer..." name="New..."/>
 			<button label="Supprimer..." label_selected="Supprimer..." name="Delete..."/>
 			<text name="loading_text">
-				Chargement en cours...
+				Chargement...
 			</text>
 		</panel>
-		<panel label="1st Life" name="1st Life">
+		<panel label="1ère vie" name="1st Life">
 			<text name="Photo:">
 				Photo :
 			</text>
@@ -152,12 +152,12 @@
 		</panel>
 		<panel label="Mes notes" name="My Notes">
 			<string name="Loading">
-				Chargement en cours...
+				Chargement...
 			</string>
 			<text name="label">
 				Dans cet espace, vous pouvez enregistrer vos remarques au sujet de ce
 résident ou prendre des notes sur certains projets. Vous êtes le seul à
-pouvoir accéder à cet espace et même le résident dont vous consultez le profil
+pouvoir accéder à cette page et même le résident dont vous consultez le profil
 ne pourra pas voir ce que vous avez écrit.
 			</text>
 			<text_editor bottom_delta="-260" height="240" name="notes edit"/>
@@ -193,6 +193,6 @@ Ceci n&apos;est pas possible tant que vous êtes sur l&apos;île d&apos;orientat
 		Offrir au résident d&apos;être téléporté là où vous êtes.
 	</string>
 	<string name="Loading">
-		Chargement en cours...
+		Chargement...
 	</string>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml b/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
index b43b1fe..9448d4b 100644
--- a/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
@@ -11,10 +11,10 @@
 			- Type de public -
 		</combo_item>
 		<combo_item name="mature">
-			Contenu réservé aux adultes
+			Adulte
 		</combo_item>
 		<combo_item name="not_mature">
-			Contenu non réservé aux adultes
+			Tout public
 		</combo_item>
 	</check_box>
 	<text name="classified_info_text" tool_tip="Plus vous payez cher pour votre annonce, mieux elle est placée dans la liste.">
diff --git a/indra/newview/skins/default/xui/fr/panel_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_chat_bar.xml
index 2d26cd5..57c1f50 100644
--- a/indra/newview/skins/default/xui/fr/panel_chat_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_chat_bar.xml
@@ -4,11 +4,14 @@
 	<button label="Chat local" name="History" tool_tip="Cliquez ici pour voir ce qui a été dit"/>
 	<line_editor label="Cliquez ici pour chatter." name="Chat Editor" tool_tip="Appuyez sur Entrée pour dire quelque chose, Ctrl-Entrée pour crier."/>
 	<flyout_button label="Dire" name="Say" tool_tip="(Entrée)">
+		<flyout_button_item name="shout_item">
+			Crier
+		</flyout_button_item>
 		<flyout_button_item name="say_item">
 			Dire
 		</flyout_button_item>
-		<flyout_button_item name="shout_item">
-			Crier
+		<flyout_button_item name="whisper_item">
+			Chuchoter
 		</flyout_button_item>
 	</flyout_button>
 	<combo_box label="Gestes" name="Gesture"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_event.xml b/indra/newview/skins/default/xui/fr/panel_event.xml
index 1d6e7c3..bd4582b 100644
--- a/indra/newview/skins/default/xui/fr/panel_event.xml
+++ b/indra/newview/skins/default/xui/fr/panel_event.xml
@@ -43,7 +43,7 @@
 		(personne)
 	</text>
 	<text name="event_location_label">
-		Emplacement :
+		Lieu :
 	</text>
 	<text name="event_location">
 		(aucun)
diff --git a/indra/newview/skins/default/xui/fr/panel_group.xml b/indra/newview/skins/default/xui/fr/panel_group.xml
index 6787b40..a75dd6d 100644
--- a/indra/newview/skins/default/xui/fr/panel_group.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="GroupInfo" title="Infos du groupe">
+<panel name="GroupInfo" title="Profil du groupe">
 	<text name="default_needs_apply_text">
 		Certains changements n&apos;ont pas été appliqués sur cet onglet.
 	</text>
 	<text name="want_apply_text">
-		Voulez-vous les appliquer ?
+		Voulez-vous enregistrer les modifications ?
 	</text>
 	<button label="Appliquer" label_selected="Appliquer" name="btn_apply" />
 	<button label="Annuler" label_selected="Annuler" name="btn_cancel" />
diff --git a/indra/newview/skins/default/xui/fr/panel_group_finder.xml b/indra/newview/skins/default/xui/fr/panel_group_finder.xml
index 1732906..79921ca 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_finder.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_finder.xml
@@ -4,6 +4,6 @@
 		Certains changements n&apos;ont pas été appliqués sur cet onglet.
 	</text>
 	<text name="want_apply_text">
-		Voulez-vous les appliquer ?
+		Voulez-vous enregistrer les modifications ?
 	</text>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_general.xml b/indra/newview/skins/default/xui/fr/panel_group_general.xml
index b6814cf..0dd40ff 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_general.xml
@@ -1,24 +1,22 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Général" name="general_tab">
 	<text name="help_text">
-		L&apos;onglet Général contient des infos générales sur le groupe, une liste des propriétaires et des membres visibles, les préférences relatives au groupe ainsi que différentes options concernant les membres.
+		L&apos;onglet Général contient les infos générales et les préférences du groupe ainsi que la liste des propriétaires et des membres visibles.
 
-Pour obtenir de l&apos;aide, survolez les options avec votre souris.
 	</text>
 	<string name="group_info_unchanged">
-		Les infos générales du groupe ont changé.
+		Le profil du groupe a changé.
 	</string>
 	<button label="?" label_selected="?" name="help_button"/>
 	<line_editor label="Saisissez le nom du groupe ici" name="group_name_editor">
-		Entrez le nom de votre nouveau groupe ici
+		Saisissez le nom du groupe ici
 	</line_editor>
 	<text name="group_name">
 		Saisissez le nom du groupe ici
 	</text>
 	<text name="prepend_founded_by">
-		Fondé par
-	</text>
-	<text name="founder_name">
+		Fondé par </text>
+<text name="founder_name">
 		(en attente)
 	</text>
 	<text name="group_charter_label">
@@ -26,7 +24,7 @@ Pour obtenir de l&apos;aide, survolez les options avec votre souris.
 	</text>
 	<texture_picker label="Logo du groupe" name="insignia" tool_tip="Cliquez pour sélectionner une image"/>
 	<text_editor name="charter">
-		Charte du groupe
+		Indiquez ici la charte de votre groupe
 	</text_editor>
 	<button label="Rejoindre (0L$)" label_selected="Rejoindre (0L$)" name="join_button"/>
 	<button label="Affichage détaillé" label_selected="Affichage détaillé" name="info_button"/>
@@ -48,7 +46,7 @@ Pour obtenir de l&apos;aide, survolez les options avec votre souris.
 		<column label="Dernière connexion" name="online" relwidth="0.35"/>
 	</name_list>
 	<text name="text_group_preferences">
-		Préférences du groupe
+		Préférences
 	</text>
 	<text name="incomplete_member_data_str">
 		Extraction des données du résident en cours
@@ -56,10 +54,10 @@ Pour obtenir de l&apos;aide, survolez les options avec votre souris.
 	<text name="confirm_group_create_str">
 		La création de ce groupe coûte 100 L$. 
 Êtes-vous vraiment certain de vouloir dépenser 100 L$ pour créer ce groupe ?
-Sachez que si personne ne rejoint ce groupe sous 48h, il sera démantelé et ne pourra plus être utilisé à l&apos;avenir.
+Sachez que si personne ne rejoint ce groupe sous 48h, il sera démantelé et ne pourra plus être utilisé.
 	</text>
 	<text>
-		Préférences du Groupe
+		Préférences
 	</text>
 	<panel name="preferences_container">
 		<check_box label="Afficher dans la recherche" name="show_in_group_list" tool_tip="Afficher ce groupe dans les résultats de recherche."/>
@@ -73,7 +71,7 @@ Sachez que si personne ne rejoint ce groupe sous 48h, il sera démantelé et ne
 				- Type de public -
 			</combo_item>
 			<combo_item name="mature">
-				Contenu pour adultes
+				Adulte
 			</combo_item>
 			<combo_item name="not_mature">
 				Tout public
@@ -85,7 +83,7 @@ Sachez que si personne ne rejoint ce groupe sous 48h, il sera démantelé et ne
 			</text>
 			<combo_box name="active_title" tool_tip="Définit le titre qui apparaît près du nom de votre avatar lorsque ce groupe est actif."/>
 		</panel>
-		<check_box label="Recevoir des notifications du groupe" name="receive_notices" tool_tip="Cochez si vous souhaitez recevoir les notifications envoyées au groupe. Décochez si ce groupe vous envoie des spams."/>
+		<check_box label="Recevoir les notices" name="receive_notices" tool_tip="Cochez si vous souhaitez recevoir les notices envoyées au groupe. Décochez si ce groupe vous envoie des spams."/>
 		<check_box label="Afficher dans mon profil" name="list_groups_in_profile" tool_tip="Indique si vous voulez que ce groupe apparaisse dans votre profil"/>
 	</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 00a62ad..68c5a22 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
@@ -6,21 +6,21 @@
 le Sélecteur de Personnes&apos; pour commencer.
 	</text>
 	<text name="help_text">
-		Vous pouvez inviter plusieurs résidents. 
-Cliquez sur Sélecteur 
-de personnes pour commencer.
+		Vous pouvez inviter plusieurs résidents.
+Pour commencer, cliquez sur
+Choisir un résident.
 	</text>
-	<button label="Sélecteur de personnes" name="add_button" tool_tip=""/>
+	<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>
-		Choisissez le Rôle à leur attribuer :
+		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 des invitations" name="ok_button"/>
+	<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 !
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 2bc97bd..1267689 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,17 +1,18 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Terrain &amp; L$" name="land_money_tab">
+<panel label="Terrain et L$" name="land_money_tab">
 	<text name="help_text">
-		Les parcelles appartenant au groupe apparaissent avec les détails des contributions. Un avertissement apparaîtra tant que le Total du terrain utilisé sera inférieur ou égal au Total des contributions. Les onglets Planification, Détails et Ventes fournissent des détails sur les finances du groupe.
+		Les parcelles appartenant au groupe sont indiquées avec le détail 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.
 	</text>
 	<button label="?" name="help_button"/>
 	<text name="cant_view_group_land_text">
 		Vous n&apos;avez pas la permission de voir quel terrain possède ce groupe.
 	</text>
 	<text name="cant_view_group_accounting_text">
-		Vous n&apos;avez pas la permission d&apos;accéder aux informations financières de ce groupe.
+		Vous n&apos;avez pas la permission d&apos;accéder aux informations
+financières de ce groupe.
 	</text>
 	<string name="loading_txt">
-		Chargement en cours...
+		Chargement...
 	</string>
 	<text name="group_land_heading">
 		Terrain du groupe
@@ -58,7 +59,7 @@
 charge le terrain utilisé.
 	</text>
 	<text name="group_money_heading">
-		Comptes du groupe
+		Finances
 	</text>
 	<tab_container name="group_money_tab_container">
 		<panel label="Planification" name="group_money_planning_tab">
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 8a9ef69..17ed4f5 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
@@ -1,19 +1,18 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Notifications" name="notices_tab">
+<panel label="Notices" name="notices_tab">
 	<text name="help_text">
-		Les notifications vous permettent d&apos;envoyer des messages et pièces-jointes à tous les membres du groupe en même temps. Ces messages ne sont envoyés qu&apos;aux membres dont le rôle les autorise à recevoir des notifications. Vous pouvez désactiver les notifications à l&apos;onglet Général.
+		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 notification précédemment envoyée.
+		Aucune notice
 	</text>
 	<button label="?" label_selected="?" name="help_button"/>
 	<text name="lbl">
-		Archive des notifications du groupe
+		Anciennes notices du groupe
 	</text>
 	<text name="lbl2">
-		Les notifications sont conservées pendant 14 jours. Cliquez sur la notification que vous
-voulez afficher. Pour voir si vous avez reçu de nouvelles notifications, cliquez sur
-Rafraîchir. Chaque groupe a une limite quotidienne de 200 notifications.
+		Double-cliquez sur une notice pour l'afficher. 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"/>
@@ -24,15 +23,15 @@ Rafraîchir. Chaque groupe a une limite quotidienne de 200 notifications.
 	<text name="notice_list_none_found">
 		Aucun résultat.
 	</text>
-	<button label="Créer une notification" label_selected="Créer une notification" name="create_new_notice"/>
+	<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 notification" name="panel_create_new_notice">
+	<panel label="Créer une notice" name="panel_create_new_notice">
 		<text name="lbl">
-			Créer une notification
+			Créer une notice
 		</text>
 		<text name="lbl2">
-			Pour envoyer une notification, vous devez saisir un sujet. Pour joindre
-une pièce-jointe à cette notification, faites-la glisser depuis votre 
+			Pour envoyer une notice, saisissez un sujet. 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.
@@ -46,20 +45,20 @@ dossiers.
 		</text>
 		<text_editor bottom_delta="-90" height="104" name="create_message"/>
 		<text name="lbl5">
-			Attacher :
+			Pièce-jointe :
 		</text>
 		<line_editor name="create_inventory_name" width="206"/>
 		<button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/>
-		<button label="Envoyer notification" label_selected="Envoyer notification" left="274" name="send_notice" width="140"/>
-		<panel name="drop_target2" tool_tip="Pour joindre un objet de l&apos;inventaire à la notification, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notification, 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 notification, faites-le glisser dans la boîte de message. Pour envoyer l&apos;objet avec la notification, vous devez avoir la permission de le copier et de le transférer."/>
+		<button label="Envoyer la notice" label_selected="Envoyer la notice" 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 notification" name="panel_view_past_notice">
+	<panel label="Voir ancienne notice" name="panel_view_past_notice">
 		<text name="lbl">
-			Notification archivée
+			Anciennes notices
 		</text>
 		<text name="lbl2">
-			Pour envoyer une nouvelle notification, cliquez sur Créer une notification ci-dessus.
+			Pour envoyer une nouvelle notice, cliquez sur Créer une notice ci-dessus.
 		</text>
 		<text name="lbl3">
 			Sujet :
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 e973b43..84e2e5e 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
@@ -4,7 +4,7 @@
 		Certains changements n&apos;ont pas été appliqués sur ce sous-onglet.
 	</text>
 	<text name="want_apply_text">
-		Voulez-vous les appliquer ?
+		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.
@@ -12,12 +12,11 @@
 	<button label="?" name="help_button"/>
 	<panel name="members_header">
 		<text name="static">
-			Membres et rôles
+			Membres
 		</text>
 		<text name="static2">
-			Chaque membre reçoit un rôle auquel sont associés certains pouvoirs. Ces
-paramètres peuvent être facilement personnalisés, ce qui permet une
-meilleure organisation et plus de flexibilité.
+			Les rôles de chaque membre peuvent être personnalisés, ce qui permet une
+meilleure organisation du groupe.
 		</text>
 	</panel>
 	<panel name="roles_header">
@@ -55,11 +54,11 @@ quels membres ces pouvoirs sont assignés.
 			<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="Terrain donné" name="donated" width="116"/>
+				<column label="Surface donnée" name="donated" width="116"/>
 				<column label="Dernière connexion" name="online" width="136"/>
 			</name_list>
-			<button label="Inviter nouveau résident..." name="member_invite" width="165"/>
-			<button label="Expulser du groupe" name="member_eject"/>
+			<button label="Inviter un nouveau 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.
@@ -77,7 +76,7 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to
 			<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 a un titre et une liste des pouvoirs assignés aux membres. Chaque membre peut avoir un ou plusieurs rôles. Un groupe peut avoir jusqu&apos;à 10 rôles, y compris les rôles Tous et Propriétaires.
+				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.
@@ -92,7 +91,7 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to
 				<column label="" name="action"/>
 			</scroll_list>
 			<text name="help_text">
-				Lorsqu&apos;un membre a des pouvoirs, il peut faire un certain nombre de choses dans le groupe. Il existe un grand nombre de pouvoirs.
+				Les pouvoirs déterminent les facultés de chaque membre dans le groupe.
 			</text>
 		</panel>
 	</tab_container>
@@ -137,8 +136,7 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to
 		<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="Les membres sont 
-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."/>
+		<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"/>
@@ -153,10 +151,10 @@ visibles" name="role_visible_in_list" tool_tip="Définit si les membres de ce r
 			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 pouvoirs
+			Rôles avec ce pouvoir
 		</text>
 		<text name="static3">
-			Membres avec pouvoirs
+			Membres avec ce pouvoir
 		</text>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_voting.xml b/indra/newview/skins/default/xui/fr/panel_group_voting.xml
index ffe96fb..edf22f5 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_voting.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_voting.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Propositions" name="voting_tab">
 	<text name="help_text">
 		Les propositions de groupe permettent d&apos;en savoir plus sur les objectifs du groupe ou son avis sur un sujet donné. Si vous avez les pouvoirs requis, vous pouvez créer des propositions, voter et accéder à d&apos;anciennes propositions.
@@ -49,29 +49,29 @@ ou abstenez-vous en cliquant sur M&apos;abstenir.
 	<text name="quorum_lbl">
 		Quorum :
 	</text>
-	<spinner name="quorum" tool_tip="Nombre total de votants nécessaires pour que les résultats de l&apos;élection soient valides."/>
+	<spinner name="quorum" tool_tip="Nombre total de votants nécessaires pour que les résultats soient valides."/>
 	<text name="quorum_text">
 		sur [MEMBERS] membres doivent voter.
 	</text>
 	<text name="duration_lbl">
 		Durée :
 	</text>
-	<spinner name="duration" tool_tip="Durée de l&apos;élection (en nombre de jours)."/>
+	<spinner name="duration" tool_tip="Durée du vote (en nombre de jours)."/>
 	<text name="duration_text">
 		jours
 	</text>
-	<radio_group left="296" name="majority" tool_tip="Majorité de tous les votes nécessaires pour remporter l&apos;élection.">
+	<radio_group left="296" name="majority" tool_tip="Majorité de tous les votes nécessaires pour remporter le vote.">
 		Majorité simple
 		Majorité des 2/3
 		Unanimité
 	</radio_group>
 	<text name="start_lbl">
-		Début du vote :
+		Début :
 	</text>
 	<text name="end_lbl">
-		Fin du vote :
+		Fin :
 	</text>
-	<button label="Soumettre la proposition" label_selected="Soumettre la proposition" left="170" name="btn_submit" width="150"/>
+	<button label="Soumettre" label_selected="Soumettre" left="170" name="btn_submit" width="100"/>
 	<button label="Annuler" label_selected="Annuler" left_delta="158" name="btn_cancel"/>
 	<button font="SansSerifSmall" label="Oui" label_selected="Oui" left="183" name="btn_yes" width="70"/>
 	<button font="SansSerifSmall" label="Non" label_selected="Non" left_delta="77" name="btn_no" width="70"/>
@@ -106,6 +106,6 @@ ou abstenez-vous en cliquant sur M&apos;abstenir.
 		Votre vote a bien été reçu.
 	</string>
 	<string name="vote_previously_recorded">
-		Vous avez déjà voté. Vous ne pouvez voter qu&apos;une fois au cours d&apos;une élection.
+		Vous avez déjà voté. Vous ne pouvez voter qu&apos;une seule fois sur une proposition.
 	</string>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index 4be1bf8..a61a0a7 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -29,7 +29,7 @@
 			&lt;Nom de la région&gt;
 		</combo_item>
 	</combo_box>
-	<check_box label="Enregistrer le mot de passe" name="remember_check"/>
+	<check_box label="Mémoriser" name="remember_check"/>
 	<text name="full_screen_text">
 		Le plein écran sera activé après identification.
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_media_controls.xml
index d13aaee..6451b51 100644
--- a/indra/newview/skins/default/xui/fr/panel_media_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_media_controls.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="media_controls">
-	<icon name="music_icon" tool_tip="Jouer/pauser le flux musical"/>
-	<button name="music_play" tool_tip="Jouer/pauser le flux musical"/>
-	<button name="music_pause" tool_tip="Pauser le flux musical"/>
-	<button name="music_stop" tool_tip="Arrêter le flux musical"/>
-	<icon name="media_icon" tool_tip="Jouer/pauser le flux musical"/>
-	<button name="media_play" tool_tip="Jouer/pauser le flux musical"/>
-	<button name="media_pause" tool_tip="Pauser le flux de média"/>
-	<button name="media_stop" tool_tip="Arrêter le flux de média"/>
+	<icon name="music_icon" tool_tip="Jouez / pausez le flux musical"/>
+	<button name="music_play" tool_tip="Jouez / pausez le flux musical"/>
+	<button name="music_pause" tool_tip="Pausez le flux musical"/>
+	<button name="music_stop" tool_tip="Arrêtez le flux musical"/>
+	<icon name="media_icon" tool_tip="Jouer / pauser le flux musical"/>
+	<button name="media_play" tool_tip="Jouez / pausez le flux musical"/>
+	<button name="media_pause" tool_tip="Pausez le flux de média"/>
+	<button name="media_stop" tool_tip="Arrêtez le flux de média"/>
 	<volume_slider name="volume_slider" tool_tip="Volume principal"/>
 	<button name="mute_master" tool_tip="Coupez le volume principal"/>
 	<button name="expand" tool_tip="Ajustez les niveaux de volume individuels"/>
@@ -27,10 +27,10 @@
 		(URL cachée par le propriétaire de la parcelle)
 	</string>
 	<string name="media_icon_tooltip_web">
-		Il y a du contenu  web à cet endroit. Cliquez sur Jouer pour afficher le contenu web.
+		Cet endroit propose du contenu Web. Cliquez sur Jouer pour afficher le contenu web.
 	</string>
 	<string name="media_icon_tooltip_movie">
-		Il y a du contenu vidéo à cet endroit. Cliquez sur Jouer pour lire la vidéo.
+		Cet endroit propose du contenu vidéo. Cliquez sur Jouer pour lire la vidéo.
 	</string>
 	<string name="media_play_tooltip">
 		Afficher le contenu web qui se trouve ici.
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml b/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
index eb1ce2f..de84e8d 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
@@ -6,10 +6,10 @@
 	<panel left="159" name="Volume Panel" width="249"/>
 	<check_box label="Couper le son" name="disable audio"/>
 	<text bottom="-195" name="streaming_prefs_text" width="145">
-		Préférences média :
+		Média :
 	</text>
 	<text name="audio_prefs_text">
-		Préférences audio :
+		Audio :
 	</text>
 	<panel label="Volume" name="Volume Panel"/>
 	<check_box label="Couper le son lorsque la fenêtre est minimisée" left="159" name="mute_when_minimized"/>
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 55faeb5..d89a47d 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -19,7 +19,7 @@ du chat :
 		Couleur du chat :
 	</text>
 	<color_swatch label="Vous" name="user"/>
-	<color_swatch label="Les autres" name="agent" width="60"/>
+	<color_swatch label="Avatars" name="agent" width="60"/>
 	<color_swatch label="IM" left_delta="64" name="im"/>
 	<color_swatch label="Système" name="system"/>
 	<color_swatch label="Erreurs" name="script_error"/>
@@ -45,7 +45,7 @@ du chat :
 	<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 local" name="show_timestamps_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"/>
 	<text length="1" name="text_box7" type="string">
 		Bulles de chat  :
@@ -55,5 +55,5 @@ du chat :
 	<text length="1" name="text_box8" type="string">
 		Erreurs de script :
 	</text>
-	<check_box label="Afficher les erreurs et avertissements dans le chat" name="script_errors_as_chat"/>
+	<check_box label="Afficher les erreurs dans le chat" name="script_errors_as_chat"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
index 04a7172..f9ead80 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Général" name="general_panel">
-	<combo_box name="location_combobox" width="166">
-		<combo_item name="MyHome">
+	<radio_group name="default_start_location" width="166">
+		<radio_item name="MyHome" tool_tip="Par défaut, choisir mon domicile comme lieu de départ.">
 			Domicile
-		</combo_item>
-		<combo_item name="MyLastLocation">
+		</radio_item>
+		<radio_item name="MyLastLocation" tool_tip="Par défaut, choisir mon dernier emplacement comme lieu de départ.">
 			Dernier emplacement
-		</combo_item>
-	</combo_box>
+		</radio_item>
+	</radio_group>
 	<check_box label="Afficher le lieu de départ sur l&apos;écran de connexion" name="show_location_checkbox"/>
 	<combo_box name="fade_out_combobox" width="166">
 		<combo_item name="Never">
@@ -20,21 +20,22 @@
 			Toujours
 		</combo_item>
 	</combo_box>
+	<check_box label="Nom des avatars en petit" name="small_avatar_names_checkbox"/>
 	<check_box label="Masquer mon nom sur mon écran" name="show_my_name_checkbox"/>
 	<text name="group_titles_textbox">
 		Titres de groupe :
 	</text>
 	<check_box label="Masquer tous les titres de groupe" name="show_all_title_checkbox"/>
 	<check_box label="Masquer mon titre de groupe" name="show_my_title_checkbox"/>
-	<check_box label="Nom de l&apos;avatar en petit" name="small_avatar_names_checkbox"/>
-	<check_box label="M&apos;avertir lorsque mes amis se connectent" name="friends_online_notify_checkbox"/>
+	<color_swatch label="" name="effect_color_swatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
 	<text name="UI Size:">
 		Taille de l&apos;interface :
 	</text>
+	<slider name="ui_scale_slider"/>
 	<check_box label="Utiliser une échelle indépendante de la résolution" name="ui_auto_scale"/>
+	<spinner label="Absent(e) après :" name="afk_timeout_spinner"/>
 	<check_box label="Pivoter la mini-carte" name="rotate_mini_map_checkbox"/>
 	<check_box label="M&apos;avertir lorsque je dépense ou reçois des L$" name="notify_money_change_checkbox"/>
-	<check_box label="Détecter carte graphique au prochain démarrage" name="probe_hardware_checkbox" tool_tip="Second Life configure automatiquement certains réglages de la carte graphique d&apos;après votre configuration matérielle. Nous vous recommandons d&apos;effectuer la détection à chaque nouvelle installation de matériel."/>
 	<check_box label="Utiliser le sélecteur de couleur par défaut" name="use_system_color_picker_checkbox" tool_tip="Utiliser le sélecteur de couleur par défaut au lieu de celui intégré à Second Life."/>
 	<check_box label="Afficher la boîte de recherche en haut à droite de l&apos;écran" name="show_search_panel" tool_tip="Affiche la boîte de recherche incorporée."/>
 	<text length="1" name="start_location_textbox" type="string">
@@ -43,8 +44,8 @@
 	<text length="1" name="show_names_textbox" type="string">
 		Afficher les noms :
 	</text>
-	<text length="1" name="effects_color_textbox" type="string">
-		Couleur du faisceau de sélection :
+	<text length="1" name="effects_color_textbox" type="string" bottom="-174">
+		Couleur du faisceau &#10;de sélection :
 	</text>
 	<text length="1" name="seconds_textbox" type="string">
 		secondes
@@ -58,22 +59,9 @@
 	<text left_delta="313" length="1" name="language_textbox2" type="string">
 		(redémarrage requis)
 	</text>
-	<radio_group name="fade_out_radio">
-		<radio_item length="1" name="Never" type="string">
-			Jamais
-		</radio_item>
-		<radio_item length="1" name="Temporarily" type="string">
-			Temporairement
-		</radio_item>
-		<radio_item length="1" name="Always" type="string">
-			Toujours
-		</radio_item>
-	</radio_group>
-	<color_swatch label="" name="effect_color_swatch" tool_tip="Cliquer pour ouvrir le sélecteur de couleurs"/>
-	<spinner label="Absent(e) après :" name="afk_timeout_spinner"/>
-	<text name="region_name_prompt">
+	<string name="region_name_prompt">
 		&lt;Saisissez le nom de la région&gt;
-	</text>
+	</string>
 	<combo_box name="crash_behavior_combobox" width="166">
 		<combo_item length="1" name="Askbeforesending" type="string">
 			Demander avant d&apos;envoyer
@@ -90,7 +78,10 @@
 			Choix par défaut
 		</combo_item>
 		<combo_item length="1" name="English" type="string">
-			Anglais
+			English (Anglais)
+		</combo_item>
+		<combo_item length="1" name="Chinese" type="string">
+			汉语/漢語 (Chinois) - Bêta
 		</combo_item>
 		<combo_item length="1" name="Deutsch(German)" type="string">
 			Deutsch (Allemand) - Bêta
@@ -104,9 +95,6 @@
 		<combo_item length="1" name="(Korean)" type="string">
 			한국어 (Coréen) - Bêta
 		</combo_item>
-		<combo_item length="1" name="Chinese" type="string">
-			汉语/漢語 (Chinois) - Bêta
-		</combo_item>
 		<combo_item name="Portugese">
 			Portugués (Portugais) - Bêta
 		</combo_item>
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 00e4cae..0892db4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -2,7 +2,7 @@
 <panel label="Graphiques" name="Display panel">
 	<button label="?" name="GraphicsPreferencesHelpButton"/>
 	<text_editor bottom="-56" height="40" left="25" name="FullScreenInfo" width="460">
-		Cochez cette option pour que le client s&apos;affiche en plein écran.
+		Décochez cette option pour passer en mode plein écran.
 	</text_editor>
 	<text name="WindowSizeLabel">
 		Taille de la fenêtre :
@@ -139,7 +139,7 @@
 	<slider label="  Flexiprims :" name="FlexibleMeshDetail"/>
 	<slider label="  Arbres :" name="TreeMeshDetail"/>
 	<slider label="  Avatars :" name="AvatarMeshDetail"/>
-	<slider label="Relief :" name="TerrainMeshDetail"/>
+	<slider label="  Relief :" name="TerrainMeshDetail"/>
 	<slider label="  Ciel :" name="SkyMeshDetail"/>
 	<text name="PostProcessText">
 		Faible
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_im.xml b/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
index e855e6a..d2c4333 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
@@ -8,14 +8,14 @@
 		se connecter pour changer
 	</text>
 	<check_box label="Envoyer les IM à mon adresse e-mail ([EMAIL])" name="send_im_to_email"/>
-	<check_box label="Inclure les IM dans le chat local" name="include_im_in_chat_history"/>
+	<check_box label="Afficher les IM dans le chat" name="include_im_in_chat_history"/>
 	<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">
-		Options de connexion :
+		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"/>
@@ -27,6 +27,6 @@
 	<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 length="1" name="text_box2" type="string">
-		Options des IM :
+		IM :
 	</text>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_input.xml b/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
index 6593e2a..c21ae24 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
@@ -18,7 +18,7 @@
 	<check_box label="Inverser la souris" name="invert_mouse"/>
 	<check_box label="Voler/atterrir en appuyant sur la flèche du haut/bas" name="automatic_fly"/>
 	<text name="Camera Follow Distance:">
-		Distance de la caméra :
+		Distance :
 	</text>
 	<text name="Camera Transition Time:">
 		Temps de transition :
@@ -26,12 +26,12 @@
 	<text name="Camera Smoothing:">
 		Effet de lissage :
 	</text>
-	<check_box label="Ajustement automatique de la caméra 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 de la caméra en mode Apparence" name="appearance_camera_movement" tool_tip="Positionner automatiquement la caméra en mode Édition"/>
+	<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 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 dans la vue subjective" name="first_person_avatar_visible"/>
+	<check_box label="Montrer l&apos;avatar en vue subjective" name="first_person_avatar_visible"/>
 	<text name="text5">
 		Options du joystick :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_network.xml b/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
index 99acb4f..32a9694 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
@@ -7,7 +7,7 @@
 		kbps (kilobits par seconde)
 	</text>
 	<text name="cache_size_label_l" width="210">
-		Taille de la mémoire cache du disque :
+		Taille de la mémoire :
 	</text>
 	<text length="1" name="text_box5" type="string">
 		Mo
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml b/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml
index 01fe695..ae17627 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml
@@ -10,7 +10,7 @@
 	<text name="show_label">
 		Afficher ces pop-ups :
 	</text>
-	<button label="Désactiver tous les pop-ups..." name="skip_dialogs_btn" tool_tip="Désactiver tous les pop-ups et les notifications envoyées lors d&apos;un premier usage." width="185"/>
+	<button label="Désactiver tous les pop-ups" name="skip_dialogs_btn" tool_tip="Désactiver tous les pop-ups et les notifications envoyées lors d&apos;un premier usage." width="185"/>
 	<text length="1" name="text_box2" type="string">
 		Offres de notes, textures et repères :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml b/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
index 4580984..aac6bc0 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
@@ -16,11 +16,11 @@
 		Mode Appuyer pour parler
 	</text>
 	<text_editor name="voice_chat_description" width="465">
-		En mode Appuyer pour parler, vous contrôlez le moment où votre voix est transmise en appuyant et en relâchant le bouton Parler en bas à droite de l&apos;écran. Pour quitter ce mode et laisser votre micro constamment activé, verrouillez le petit cadenas en cliquant dessus. Vous pouvez aussi définir une touche de contrôle pour le mode Appuyer pour parler. Pour cela, laissez le cadenas à gauche du bouton Parler déverrouillé, cochez l&apos;option ci-dessous et choisissez une nouvelle touche.
+		Avec ce mode, vous contrôlez quand vous parlez en appuyant sur le bouton Parler de l&apos;interface. Vous pouvez définir une touche de contrôle supplémentaire en cochant l&apos;option ci-dessous. Pour laisser votre micro constamment ouvert, verrouillez le petit cadenas de l&apos;interface en cliquant dessus.
 	</text_editor>
 	<check_box label="Attribuer une touche de contrôle" name="push_to_talk_toggle_check"/>
 	<text name="push_to_talk_label">
-		Touche de contrôle du mode Appuyer pour parler :
+		Touche de contrôle :
 	</text>
 	<button label="Choisir la touche" name="set_voice_hotkey_button"/>
 	<button label="Molette de la souris" name="set_voice_middlemouse_button"/>
@@ -29,7 +29,7 @@
 	</text>
 	<check_box label="N&apos;accepter que les appels de mes amis" name="voice_call_friends_only_check"/>
 	<text_editor name="device_settings_text">
-		Remarque : si vous cliquez sur Paramètres du matériel, vous serez temporairement deconnecté du chat vocal.
+		Remarque : si vous cliquez sur Paramètres du matériel, vous serez temporairement déconnecté du Chat vocal. Tous les changements que vous faites seront immédiatement appliqués.
 	</text_editor>
 	<button label="Paramètres du matériel" name="device_settings_btn"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
index ff258d4..7071e0f 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
@@ -33,7 +33,7 @@
 		Le terrain acheté dans cette région peut être fusionné/divisé ou pas.
 	</text>
 	<text_editor name="covenant_editor">
-		Chargement en cours...
+		Chargement...
 	</text_editor>
 	<text name="can_resell">
 		Le terrain acheté dans cette région peut être revendu.
diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
index 2cc1736..d3ee6df 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
@@ -13,12 +13,19 @@
 	<check_box label="Désactiver les propriétés physiques" name="disable_physics_check" tool_tip="Désactiver toutes les propriétés physiques dans cette région"/>
 	<button label="?" name="disable_physics_help"/>
 	<button label="Appliquer" name="apply_btn"/>
+	<text name="objret_text_lbl">
+		Renvoi de l&apos;objet
+	</text>
+	<text name="resident_text_lbl">
+		Résident :
+	</text>
 	<line_editor name="target_avatar_name">
 		(aucun)
 	</line_editor>
 	<button label="Choisir..." name="choose_avatar_btn"/>
-	<button label="Renvoyer les objets scriptés de l&apos;avatar vers une propriété tierce" name="return_scripted_other_land_btn"/>
-	<button label="Renvoyer tous les objets scriptés de l&apos;avatar" name="return_scripted_all_btn"/>
+	<text name="options_text_lbl">
+		Options :
+	</text>
 	<check_box label="Ne renvoyer que les objets avec des scripts" name="return_scripts" tool_tip="Ne renvoyer que les objets avec des scripts."/>
 	<check_box label="Ne renvoyer que les objets sur le terrain de quelqu&apos;un d&apos;autre" name="return_other_land" tool_tip="Ne renvoyer que les objets se trouvant sur le terrain de quelqu&apos;un d&apos;autre"/>
 	<check_box label="Renvoyer les objets dans toutes les régions de ce domaine" name="return_estate_wide" tool_tip="Renvoyer les objets dans toutes les régions qui constituent ce domaine"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
index 5052bed..36f820c 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
@@ -16,10 +16,10 @@
 		(inconnu)
 	</text>
 	<text name="Only Allow">
-		Limiter l&apos;accès aux résidents :
+		Limiter l&apos;accès aux résidents qui :
 	</text>
-	<check_box label="Qui ont enregistré leurs infos de paiement" name="limit_payment" tool_tip="Bannir les résidents non identifés."/>
-	<check_box label="Adultes dont l&apos;âge a été vérifié" name="limit_age_verified" tool_tip="Bannir les résidents dont l&apos;âge n&apos;a pas été vérifié. Pour plus d&apos;infos, consultez la page support.secondlife.com."/>
+	<check_box label="Ont enregistré leurs infos de paiement" name="limit_payment" tool_tip="Bannir les résidents non identifés."/>
+	<check_box label="Ont fait vérifier leur âge" name="limit_age_verified" tool_tip="Bannir les résidents dont l&apos;âge n&apos;a pas été vérifié. Pour plus d&apos;infos, consultez la page support.secondlife.com."/>
 	<check_box label="Autoriser les chats vocaux" name="voice_chat_check"/>
 	<button label="?" name="voice_chat_help"/>
 	<text name="abuse_email_text">
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml
index 1556c87..ec3d407 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml
@@ -20,11 +20,11 @@
 	<button label="?" name="damage_help"/>
 	<check_box label="Interdire les bousculades" name="restrict_pushobject"/>
 	<button label="?" name="restrict_pushobject_help"/>
-	<check_box label="Autoriser la revente de terrain" name="allow_land_resell_check"/>
+	<check_box label="Autoriser la revente" name="allow_land_resell_check"/>
 	<button label="?" name="land_resell_help"/>
-	<check_box label="Autoriser la fusion/division de terrain" name="allow_parcel_changes_check"/>
+	<check_box label="Autoriser la fusion/division" name="allow_parcel_changes_check"/>
 	<button label="?" name="parcel_changes_help"/>
-	<check_box label="Ne pas afficher le terrain dans la recherche" name="block_parcel_search_check" tool_tip="Afficher cette région et ses parcelles dans les résultats de recherche"/>
+	<check_box label="Ne pas afficher dans la recherche" name="block_parcel_search_check" tool_tip="Afficher cette région et ses parcelles dans les résultats de recherche"/>
 	<button label="?" name="parcel_search_help"/>
 	<spinner label="Nombre limite d&apos;avatars" name="agent_limit_spin"/>
 	<button label="?" name="agent_limit_help"/>
@@ -38,7 +38,7 @@
 			Tout public
 		</combo_item>
 		<combo_item name="Mature">
-			Adultes
+			Adulte
 		</combo_item>
 	</combo_box>
 	<button label="?" name="access_help"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
index 19a1a4b..722295f 100644
--- a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
+++ b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="LLScrollingPanelParam">
 	<text type="string" length="1" name="Loading...">
-		Chargement en cours...
+		Chargement...
 	</text>
 	<text type="string" length="1" name="Loading...2">
-		Chargement en cours...
+		Chargement...
 	</text>
 	<button label="" label_selected="" name="less" />
 	<button label="" label_selected="" name="more" />
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 c3ff6f7..3ddfe31 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -4,7 +4,7 @@
 		Saisissez le nom de la parcelle ici
 	</text>
 	<text length="1" name="BalanceText" tool_tip="Solde du compte" type="string">
-		Chargement en cours...
+		Chargement...
 	</text>
 	<button label="" label_selected="" name="buycurrency" tool_tip="Acheter des devises"/>
 	<text length="12" name="TimeText" tool_tip="Heure actuelle (Californie)" type="string">
@@ -27,7 +27,7 @@
 	<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="llPushObject interdit"/>
+	<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"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_controls.xml b/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
index db4a37d..decd8cc 100644
--- a/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel name="voice_controls">
 	<button name="speakers_btn"
-	     tool_tip="Afficher la liste des résidents utilisant le chat vocal près de vous" />
-	<button label="Parler" name="push_to_talk" tool_tip="Appuyer sur le bouton pour parler" />
-	<button name="ptt_lock" tool_tip="Cliquer sur Verrouiller pour passer au mode Parler" />
-	<button name="show_channel" tool_tip="Cliquer pour afficher le canal vocal actuel" />
+	     tool_tip="Affichez la liste des résidents utilisant le chat vocal près de vous" />
+	<button label="Parler" name="push_to_talk" tool_tip="Appuyez sur le bouton pour parler" />
+	<button name="ptt_lock" tool_tip="Cliquez sur Verrouiller pour passer au mode Parler" />
+	<button name="show_channel" tool_tip="Cliquez pour afficher le canal vocal utilisé" />
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
index 6b814eb..a59304c 100644
--- a/indra/newview/skins/default/xui/fr/role_actions.xml
+++ b/indra/newview/skins/default/xui/fr/role_actions.xml
@@ -1,201 +1,201 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <role_actions>
 	<action_set
 	     description="Ces pouvoirs permettent d&apos;ajouter et de supprimer des membres du groupe et permettent aux nouveaux membres de rejoindre le groupe sans recevoir d&apos;invitation."
 	     name="Membership">
 		<action description="Inviter des membres dans ce groupe"
-		     longdescription="Invitez des membres à rejoindre ce goupe en utilisant le bouton Inviter nouvelle personne à partir de l&apos;onglet Membres et rôles &gt; Membres."
+		     longdescription="Invitez des membres à rejoindre ce goupe en utilisant le bouton Inviter un nouveau membre à partir de l&apos;onglet Membres et rôles &gt; Membres."
 		     name="member invite" value="1" />
-		<action description="Expulser des membres de ce groupe"
-		     longdescription="Expulsez des membres de ce goupe en utilisant le bouton Expulser du groupe à partir de l&apos;onglet Membres et rôles &gt; Membres. Un propriétaire peur expulser n&apos;importe qui sauf un autre propriétaire. Si vous n&apos;êtes pas propriétaire, notez qu&apos;un membre peut être expulsé d&apos;un groupe uniquement s&apos;il se trouve dans le rôle Tous et dans aucun autre rôle. Pour supprimer des rôles, vous devez avoir le pouvoir de retirer des rôles aux membres."
+		<action description="Expulser des membres du groupe"
+		     longdescription="Expulsez des membres de ce goupe en utilisant le bouton Expulser un membre à partir de l&apos;onglet Membres et rôles &gt; Membres. Un propriétaire ne peut pas être expulsé. Un membre peut être expulsé d&apos;un groupe uniquement s&apos;il a le rôle Invité (Everyone). Si vous n&apos;êtes pas propriétaire, vous devez d&apos;abord retirer les rôles d&apos;un membre avant de pouvoir l&apos;expulser."
 		     name="member eject" value="2" />
 		<action
-		     description="Mettre l&apos;inscription libre en mode bascule et changer les frais d&apos;inscription."
-		     longdescription="Mettez Inscription libre en mode bascule pour permettre aux nouveaux membres de rejoindre le groupe sans invitation et modifiez Frais d&apos;inscription dans les Préférences du groupe, sous l&apos;onglet Général."
+		     description="Gérer l&apos;inscription et les frais d&apos;inscription"
+		     longdescription="Choisissez l&apos;inscription libre pour permettre aux nouveaux membres de rejoindre le groupe sans invitation et modifiez les Frais d&apos;inscription à l&apos;onglet Général."
 		     name="member options" value="3" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent d&apos;ajouter, supprimer et modifier les rôles dans le groupe, d&apos;ajouter et de supprimer des membres affectés à ces rôles et d&apos;assigner des pouvoirs aux rôles."
+	     description="Ces pouvoirs permettent d&apos;ajouter, de supprimer et de modifier les rôles dans le groupe et d&apos;y assigner des membres et des pouvoirs."
 	     name="Roles">
 		<action description="Créer des rôles"
-		     longdescription="Créez de nouveaux rôles à l&apos;onglet Membres et rôles, sous-onglet Rôles."
+		     longdescription="Créez de nouveaux rôles à l&apos;onglet Membres et rôles &gt; Rôles."
 		     name="role create" value="4" />
 		<action description="Supprimer des rôles"
-		     longdescription="Supprimez des rôles à l&apos;onglet Membres et rôles, sous-onglet Rôles."
+		     longdescription="Supprimez des rôles à l&apos;onglet Membres et rôles &gt; Rôles."
 		     name="role delete" value="5" />
-		<action description="Modifier les noms, titres et descriptions des rôles"
-		     longdescription="Modifiez les noms, titres et descriptions des rôles à l&apos;onglet Membres et rôles, sous-onglet Rôles, après avoir sélectionné un rôle."
+		<action description="Modifier les noms, les titres et les descriptions des rôles"
+		     longdescription="Modifiez les noms, titres et descriptions des rôles à l&apos;onglet Membres et rôles &gt; Rôles."
 		     name="role properties" value="6" />
-		<action description="Affecter des membres à des rôles d&apos;attribution"
-		     longdescription="Affectez des membres à des rôles dans la section Rôles attribués à l&apos;onglet Membres et rôles, sous-onglet Membres. Un membre disposant de ce pouvoir ne peut affecter de nouveaux membres qu&apos;à un rôle auquel il est lui même affecté."
+		<action description="Attribuer des rôles limités"
+		     longdescription="Affectez des membres à certains rôles à l&apos;onglet Membres et rôles &gt; Membres. Un membre ne peut attribuer que des rôles auxquels il est lui même affecté."
 		     name="role assign member limited" value="7" />
-		<action description="Affecter des membres à tous types de rôles"
-		     longdescription="Affectez des membres à tous types de rôles dans la section Rôles attribués à l&apos;onglet Membres et rôles, sous-onglet Membres. Avertissement : tout membre disposant de ce pouvoir peut s&apos;affecter lui-même, ainsi que tout autre membre non-propriétaire du groupe, à des rôles disposant de facultés plus importantes, 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."
+		<action description="Attribuer tous les rôles"
+		     longdescription="Affectez des membres à tous types de rôles à l&apos;onglet Membres et rôles &gt; Membres &gt; Rôles assignés. Attention : ce pouvoir peut conférer des rôles très importants, proches de ceux d&apos;un propriétaire. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer."
 		     name="role assign member" value="8" />
 		<action description="Destituer des membres de leurs rôles"
-		     longdescription="Destituez des membres de leurs rôles dans la section Rôles attribués à l&apos;onglet Membres et rôles, sous-onglet Membres. Les propriétaires ne peuvent pas être destitués."
+		     longdescription="Destituez des membres de leurs rôles à partir du menu Rôles attribués à l&apos;onglet Membres et rôles &gt; Membres. Les propriétaires ne peuvent pas être destitués."
 		     name="role remove member" value="9" />
-		<action description="Attribuer et retirer les pouvoirs d&apos;un rôle"
-		     longdescription="Attribuez et retirez les pouvoirs d&apos;un rôle à partir de la section Pouvoirs attribués à l&apos;onglet Membres et rôles, sous-onglet Rôles. Avertissement : tout membre dans un rôle avec ce pouvoir peut s&apos;attribuer à lui-même, ainsi qu&apos;à tout autre membre non-propriétaire du groupe, Tous les pouvoirs, 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."
+		<action description="Modifier les pouvoirs d&apos;un rôle"
+		     longdescription="Attribuez et retirez les pouvoirs d&apos;un rôle à partir du menu Pouvoirs attribués à l&apos;onglet Membres et rôles &gt; Rôles &gt; Pouvoirs attribués. Attention : ce pouvoir peut donner des rôles très importants, proches de ceux d&apos;un propriétaire. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer."
 		     name="role change actions" value="10" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent de modifier l&apos;identité du groupe, et donc sa visibilité publique, sa charte et son emblème."
+	     description="Ces pouvoirs permettent de modifier le profil public du groupe, sa charte et son logo."
 	     name="Group Identity">
 		<action
-		     description="Modifier la charte, l&apos;emblème, les résultats dans la recherche, et quels membres apparaissent dans les Informations du groupe."
-		     longdescription="Modifier la charte, l&apos;emblème, les résultats dans la recherche, et quels membres apparaissent dans les Informations du groupe. Ces opérations s&apos;effectuent à l&apos;onglet Général."
+		     description="Modifier le profil public du groupe"
+		     longdescription="Modifier la charte, le logo, l&apos;affichage dans la recherche et la liste des membres visibles à l&apos;onglet Général."
 		     name="group change identity" value="11" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent de transférer, modifier et vendre du terrain appartenant au patrimoine du groupe. Pour accéder au menu du terrain, cliquez à droite sur le sol et sélectionnez À propos du terrain, ou bien cliquez sur les infos de la parcelle dans la barre de menus."
+	     description="Ces pouvoirs permettent de transférer, modifier et vendre du terrain appartenant au groupe. Pour accéder au menu À propos du terrain, cliquez sur le nom de la parcelle en haut de l&apos;écran ou cliquez à droite sur le sol."
 	     name="Parcel Management">
-		<action description="Transférer du terrain et acheter du terrain pour le groupe"
-		     longdescription="Transférez du terrain et achetez du terrain pour le groupe Ces opérations s&apos;effectuent à partir de À propos du terrain &gt; Général."
+		<action description="Transférer et acheter des parcelles pour le groupe"
+		     longdescription="Transférez et achetez des parcelles pour le groupe à partir du menu À propos du terrain &gt; Général."
 		     name="land deed" value="12" />
-		<action description="Céder le terrain au Governor Linden"
-		     longdescription="Cédez le terrain au Governor Linden. Avertissement : seul un membre dont le rôle lui confère ce pouvoir peut céder son terrain à la section À propos du terrain, onglet Général, le rendant ainsi au patrimoine des Linden sans le vendre ! Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir."
+		<action description="Abandonner le terrain"
+		     longdescription="Abandonnez des parcelles du groupe à Linden Lab. Attention : ce pouvoir autorise l&apos;abandon d&apos;un terrain appartenant au groupe. Ce terrain sera alors définitivement perdu. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer."
 		     name="land release" value="13" />
-		<action description="Infos sur la mise en vente du terrain"
-		     longdescription="Infos sur la mise en vente du terrain. Avertissement : seul un membre dans un rôle avec ce pouvoir peut vendre un terrain possédé par le groupe à la section À propos du terrain &gt; Général. Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir."
+		<action description="Vendre du terrain"
+		     longdescription="Vendez des parcelles du groupe. Attention : ce pouvoir autorise la vente d&apos;un terrain appartenant au groupe. Ce terrain sera alors définitivement perdu. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;attribuer."
 		     name="land set sale info" value="14" />
 		<action description="Diviser et fusionner des parcelles"
-		     longdescription="Divisez et fusionnez des parcelles Pour cela, cliquez à droite sur le sol, sélectionnez Modifier le terrain, et faites glisser votre souris sur l&apos;endroit du terrain que vous souhaitez modifier.  Pour sous-diviser le terrain, sélectionnez un endroit puis cliquez sur Diviser... Pour fusionner des parcelles, sélectionnez au moins deux parcelles adjacentes et cliquez sur Fusionner. "
+		     longdescription="Divisez et fusionnez des parcelles. Pour cela, cliquez à droite sur le sol, sélectionnez Modifier le terrain, et faites glisser votre souris sur l&apos;endroit que vous souhaitez modifier. Pour diviser le terrain, sélectionnez un endroit puis cliquez sur Diviser... Pour fusionner des parcelles, sélectionnez au moins deux parcelles adjacentes et cliquez sur Fusionner."
 		     name="land divide join" value="15" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent de modifier le nom de la parcelle, la visibilité dans l&apos;annuaire et les options de routage et de téléportation."
+	     description="Ces pouvoirs permettent de modifier le nom de la parcelle, son référencement dans la recherche et le lieu de téléportation."
 	     name="Parcel Identity">
 		<action
-		     description="Mettre Afficher dans la recherche d&apos;endroits en mode bascule et définir une catégorie."
-		     longdescription="Mettez Afficher dans la recherche d&apos;endroits en mode bascule et définissez une catégorie pour la parcelle dans À propos du terrain &gt; Options."
+		     description="Afficher dans la recherche et définir une catégorie"
+		     longdescription="Choisissez de faire apparaître la parcelle dans la recherche et définissez sa catégorie à partir du menu À propos du terrain &gt; Options."
 		     name="land find places" value="17" />
 		<action
-		     description="Modifier le nom de la parcelle, la description et les paramètres d&apos;affichage dans la recherche"
-		     longdescription="Modifiez le nom de la parcelle, la description et les paramètres d&apos;affichage dans les résultats de recherche. Ces opérations s&apos;effectuent à partir de À propos du terrain &gt;  Options."
+		     description="Modifier le nom, la description et le référencement du terrain dans la recherche"
+		     longdescription="Modifiez le nom, la description de la parcelle et son référencement dans la recherche à partir du menu À propos du terrain &gt; Options."
 		     name="land change identity" value="18" />
 		<action
-		     description="Définir le lieu d&apos;arrivée et le routage de téléportation "
-		     longdescription="Sur une parcelle appartenant au groupe, les membres ayant un rôle avec ce pouvoir peuvent définir le lieu d&apos;arrivée des téléportations et définir le routage des téléportations pour plus de contrôle. Ces opérations s&apos;effectuent à partir de À propos du terrain, onglet Options."
+		     description="Définir le lieu d&apos;arrivée et le routage des téléportations"
+		     longdescription="Définissez le lieu d&apos;arrivée des téléportations et le routage à partir du menu À propos du terrain &gt; Options."
 		     name="land set landing point" value="19" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent de contrôler les options de la parcelle, telles que l&apos;option Créer des objets ou Modifier le terrain, ainsi que les paramètres de musique et de médias."
+	     description="Ces pouvoirs permettent de définir les options de la parcelle concernant la musique, les médias, la création d&apos;objets et le relief."
 	     name="Parcel Settings">
-		<action description="Modifier les paramètres de musique et médias"
-		     longdescription="Modifiez les paramètres de flux musicaux et vidéos à partir de la section À propos du terrain, onglet Média."
+		<action description="Modifier la musique et les médias"
+		     longdescription="Changez la musique et les médias à partir du menu À propos du terrain, &gt; Médias."
 		     name="land change media" value="20" />
-		<action description="Mettre la section Modifier le terrain en mode bascule"
-		     longdescription="Mettez la section Modifier le terrain en mode bascule. Avertissement : la section À propos du terrain &gt; Options &gt; Modifier le terrain permet à tout le monde de terraformer votre terrain, disposer des plantes Linden et les déplacer. Assurez-vous de bien comprendre ce que vous faites avant d&apos;attribuer ce pouvoir. Ces opérations s&apos;effectuent à partir de À propos du terrain &gt; Options."
+		<action description="Changer l&apos;option Modifier le terrain"
+		     longdescription="Changez l&apos;option Modifier le terrain à partir du menu À propos du terrain &gt; Options. Attention : ce pouvoir permet de terraformer votre terrain et de placer ou déplacer des plantes Linden. Assurez-vous de bien comprendre ce pouvoir avant de l&apos;&apos;attribuer. "
 		     name="land edit" value="21" />
 		<action
-		     description="Mettre en bascule divers paramètres À propos du terrain &gt; Options"
-		     longdescription="Mettre en bascule Sécurisé (pas de dégâts) et Voler, et permettre aux autres résidents de : Créer des objets, Modifier le terrain, Créer des repères et Lancer des scripts sur des terrains appartenant au groupe, à partir de la section À propos du terrain &gt; Options."
+		     description="Changer diverses options du terrain"
+		     longdescription="Changez diverses options de la parcelle à partir du menu À propos du terrain &gt; Options. Vous pouvez permettre aux autres résidents de voler, créer des objets, modifier le terrain, lancer des scripts, créer des repères etc."
 		     name="land options" value="22" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent aux membres d&apos;outrepasser les restrictions sur les parcelles appartenant à un groupe."
+	     description="Ces pouvoirs permettent aux membres d&apos;outrepasser les restrictions sur les parcelles du groupe."
 	     name="Parcel Powers">
 		<action description="Toujours autoriser Modifier le terrain"
-		     longdescription="Les membres dans un rôle leur conférant ce pouvoir peuvent modifier le terrain d&apos;une parcelle appartenant au groupe, même si l&apos;option est désactivée dans la section À propos du terrain &gt; Options."
+		     longdescription="Vous pouvez modifier le relief d&apos;une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options."
 		     name="land allow edit land" value="23" />
 		<action description="Toujours autoriser à voler"
-		     longdescription="Les membres dans un rôle leur conférant ce pouvoir peuvent voler sur une parcelle appartenant au groupe, même si l&apos;option est désactivée dans la section À propos du terrain &gt; Options."
+		     longdescription="Vous pouvez voler sur une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options."
 		     name="land allow fly" value="24" />
 		<action description="Toujours autoriser à créer des objets"
-		     longdescription="Les membres dans un rôle leur conférant ce pouvoir peuvent créer des objets sur une parcelle appartenant au groupe, même si l&apos;option est désactivée dans la section À propos du terrain &gt; Options."
+		     longdescription="Vous pouvez créer des objets sur une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options."
 		     name="land allow create" value="25" />
 		<action description="Toujours autoriser à créer des repères"
-		     longdescription="Les membres dans un rôle leur conférant ce pouvoir peuvent créer un repère sur une parcelle appartenant au groupe, même si l&apos;option est désactivée dans la section À propos du terrain &gt; Options."
+		     longdescription="Vous pouvez créer un repère sur une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options."
 		     name="land allow landmark" value="26" />
-		<action description="Autoriser à définir un domicile ici sur le terrain du groupe"
-		     longdescription="Les membres dans un rôle leur conférant ce pouvoir peuvent utiliser le menu Monde &gt; Définir comme domicile sur une parcelle transférée à ce groupe."
+		<action description="Autoriser à définir un domicile sur le terrain du groupe"
+		     longdescription="Vous pouvez définir votre domicile sur une parcelle du groupe à partir du menu Monde &gt; Définir comme domicile."
 		     name="land allow set home" value="28" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent d&apos;autoriser ou d&apos;interdire l&apos;accès à des parcelles appartenant au groupe, y compris de geler ou d&apos;expulser des résidents."
+	     description="Ces pouvoirs permettent d&apos;autoriser ou d&apos;interdire l&apos;accès à des parcelles du groupe et de geler ou d&apos;expulser des résidents."
 	     name="Parcel Access">
-		<action description="Gérer les listes d&apos;accès à cette parcelle"
-		     longdescription="Gérez les listes d&apos;accès à la parcelle à partir de la section À propos du terrain &gt; Accès."
+		<action description="Gérer la liste d&apos;accès à la parcelle"
+		     longdescription="Gérez la liste des résidents autorisés sur la parcelle à partir du menu À propos du terrain &gt; Accès."
 		     name="land manage allowed" value="29" />
-		<action description="Gérer les listes noires de cette parcelle"
-		     longdescription="Gérez les listes de membres interdits sur la parcelle à partir de la section À propos du terrain &gt; Interdire."
+		<action description="Gérer la liste noire de cette parcelle"
+		     longdescription="Gérez la liste des résidents interdits sur la parcelle à partir du menu À propos du terrain &gt; Interdire."
 		     name="land manage banned" value="30" />
-		<action description="Modifier les paramètres Vendre des passes sur cette parcelle"
-		     longdescription="Modifiez les paramètres Vendre des passes à la section À propos du terrain &gt; Accès."
+		<action description="Vendre des pass"
+		     longdescription="Choisissez le prix et la durée des pass pour accéder à la parcelle à partir du menu À propos du terrain &gt; Accès."
 		     name="land manage passes" value="31" />
-		<action description="Expulser et geler des résidents sur les parcelles"
-		     longdescription="Les membres dans un rôle leur conférant ce pouvoir peuvent intervenir auprès d&apos;un résident indésirable en cliquant-droit sur lui &gt; Plus et en choisissant de les expulser ou de les geler."
+		<action description="Expulser et geler des résidents"
+		     longdescription="Vous pouvez expulser ou geler un résident indésirable en cliquant-droit sur lui, menu radial &gt; Plus."
 		     name="land admin" value="32" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent d&apos;autoriser des membres à renvoyer des objets et de placer ou déplacer des plantes Linden. Ceci permet aux membres de jeter les déchets et d&apos;aménager le paysage. A utiliser avec précaution car les objets rendus le sont définitivement."
+	     description="Ces pouvoirs permettent de renvoyer des objets du groupe et de placer ou déplacer des plantes Linden pour aménager le paysage. Utilisez ce pouvoir avec précaution car les objets renvoyés le sont définitivement."
 	     name="Parcel Content">
-		<action description="Renvoyer les objets appartenant au groupe"
-		     longdescription="Renvoyez les objets sur des parcelles appartenant au groupe à la section À propos du terrain &gt; Objets."
+		<action description="Renvoyer les objets transférés au groupe"
+		     longdescription="Vous pouvez renvoyer des objets appartenant au groupe à partir du menu À propos du terrain &gt; Objets."
 		     name="land return group owned" value="48" />
 		<action description="Renvoyer les objets attribués au groupe"
-		     longdescription="Renvoyez les objets attribués au groupe et sur des parcelles appartenant au groupe à la section À propos du terrain &gt; Objets."
+		     longdescription="Renvoyez les objets attribués au groupe et sur des parcelles du groupe à partir du menu À propos du terrain &gt; Objets."
 		     name="land return group set" value="33" />
 		<action description="Renvoyer des objets n&apos;appartenant pas au groupe"
-		     longdescription="Renvoyez les objets non attribués au groupe et sur des parcelles appartenant au groupe à la section À propos du terrain &gt; Objets."
+		     longdescription="Renvoyez les objets n&apos;appartenant pas au groupe et sur des parcelles du groupe à partir du menu À propos du terrain &gt; Objets."
 		     name="land return non group" value="34" />
 		<action description="Aménager le paysage avec des plantes Linden"
-		     longdescription="Le pouvoir de placer et de déplacer des arbres, plantes et pelouses Linden. Ces éléments sont disponibles dans le dossier Objets de la  bibiliothèque de votre inventaire ou peuvent être créés à l&apos;aide du bouton Construire."
+		     longdescription="Placez et déplacez des arbres, plantes et herbes Linden. Vous les trouverez dans le dossier Objets de la  bibliothèque de votre inventaire mais aussi à partir du menu Construire."
 		     name="land gardening" value="35" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent de transférer, modifier et vendre des objets appartenant au groupe. Ces changements se font à partir de la section Construire &gt; Modifier &gt; Général. Cliquez-droite sur un objet pour le modifier et afficher ses paramètres. "
+	     description="Ces pouvoirs permettent de transférer, modifier et vendre des objets du groupe. Ces changements se font à partir du menu Construire &gt; Modifier &gt; Général."
 	     name="Object Management">
 		<action description="Transférer des objets au groupe"
-		     longdescription="Transférez des objets à un groupe à la section Construire &gt; Modifier &gt; Général."
+		     longdescription="Transférez des objets au groupe à partir du menu Construire &gt; Modifier &gt; Général."
 		     name="object deed" value="36" />
 		<action
-		     description="Manipuler (déplacer, copier, modifier) des objets appartenant au groupe"
-		     longdescription="Manipulez (déplacez, copiez, modifiez) des objets appartenant au groupe à la section Construire &gt; Modifier &gt; Général."
+		     description="Manipuler les objets du groupe"
+		     longdescription="Déplacez, copiez et modifiez les objets du groupe à partir du menu Construire &gt; Modifier &gt; Général."
 		     name="object manipulate" value="38" />
-		<action description="Mettre en vente des objets appartenant au groupe"
-		     longdescription="Définissez les objets du groupe à vendre à la section Construire &gt; Modifier &gt; Général."
+		<action description="Vendre des objets du groupe"
+		     longdescription="Mettez en vente des objets du groupe à partir du menu Construire &gt; Modifier &gt; Général."
 		     name="object set sale" value="39" />
 	</action_set>
 	<action_set
-	     description="Les membres avec ces pouvoirs contribuent aux frais du groupe, reçoivent des dividendes et ont accès à l&apos;historique du compte du groupe."
+	     description="Ce pouvoir définit les contributions aux frais du groupe, la réception des dividendes et l&apos;accès aux finances du groupe."
 	     name="Accounting">
 		<action description="Contribuer aux frais du groupe et recevoir des dividendes"
-		     longdescription="Les membres ayant ce pouvoir contribueront automatiquement aux frais du groupe et recevront aussi des dividendes. Cela signifie qu&apos;ils recevront une portion des ventes de terrains appartenant au groupe (distribuée quotidiennement) et contribueront aux frais divers, tels que les frais de mise en vente des terrains. "
+		     longdescription="Contribuez aux frais du groupe et recevez des dividendes en cas de bénéfices. Vous recevrez une partie des ventes de terrains et objets appartenant au groupe et contribuerez aux frais divers (mise en vente des terrains etc). "
 		     name="accounting accountable" value="40" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs permettent d&apos;envoyer, recevoir et consulter les notes du groupe."
+	     description="Envoyez, recevez et consultez les notices du groupe."
 	     name="Notices">
-		<action description="Envoyer des notes"
-		     longdescription="Ces pouvoirs permettent d&apos;envoyer des notes à la section Infos du groupe &gt; Notes."
+		<action description="Envoyer des notices"
+		     longdescription="Envoyez des notices à l&apos;onglet Notices."
 		     name="notices send" value="42" />
-		<action description="Recevoir des notes et consulter les anciennes notes"
-		     longdescription="Ces pouvoirs permettent de recevoir des notes et de consulter d&apos;anciennes notes à la section Infos du groupe &gt; Notes."
+		<action description="Recevoir et consulter les notices"
+		     longdescription="Recevez des notices et consulter d&apos;anciennes notices à l&apos;onglet Notices."
 		     name="notices receive" value="43" />
 	</action_set>
 	<action_set
 	     description="Ces pouvoirs permettent de créer de nouvelles propositions, de voter et de consulter l&apos;historique des votes."
 	     name="Proposals">
 		<action description="Créer des propositions"
-		     longdescription="Ces pouvoirs permettent de créer des propositions et de les soumettre au vote, à partir de la section Infos du groupe &gt; Propositions."
+		     longdescription="Ces pouvoirs permettent de créer des propositions et de les soumettre au vote, à partir du menu Profil du groupe &gt; Propositions."
 		     name="proposal start" value="44" />
 		<action description="Voter les propositions"
-		     longdescription="Ces pouvoirs permettent de voter des propositions à la section Infos du groupe &gt; Propositions."
+		     longdescription="Votez les propositions à partir du menu Profil du groupe &gt; Propositions."
 		     name="proposal vote" value="45" />
 	</action_set>
 	<action_set
-	     description="Ces pouvoirs vous permettent d&apos;autoriser ou dinterdire l&apos;accès aux sessions de chat de groupe et au chat de groupe vocal."
+	     description="Ces pouvoirs vous permettent de gérer l&apos;accès aux sessions de chat écrit ou vocal du groupe."
 	     name="Chat">
-		<action description="Participer au chat de groupe"
-		     longdescription="Les membres qui ont ce pouvoir peuvent participer aux chats de groupe, texte ou vocal."
+		<action description="Participer aux chats"
+		     longdescription="Participez aux chats du groupe."
 		     name="join group chat" />
-		<action description="Participer au chat de groupe vocal"
-		     longdescription="Les membres qui ont ce pouvoir peuvent participer aux chats de groupe vocaux. Remarque : pour accéder à une session de chat vocal, vous devez avoir le droit de participer à un chat de groupe."
+		<action description="Participer au chat vocal"
+		     longdescription="Participez au chat vocal du groupe. Remarque : vous devez au préalable avoir le pouvoir de participer aux chats."
 		     name="join voice chat" />
-		<action description="Modérer un chat de groupe"
-		     longdescription="Les membres dont le rôle leur confèrent ce pouvoir contrôlent l&apos;accès et la participation aux chats de groupe écrits et vocaux.le"
+		<action description="Modérer les chats"
+		     longdescription="Contrôlez l&apos;accès et la participation aux chats de groupe écrits et vocaux."
 		     name="moderate group chat" />
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 3978b1d..d6387b1 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -139,7 +139,7 @@
 		Notes de version
 	</string>
 	<string name="LoadingData">
-		Chargement en cours...
+		Chargement..
 	</string>
 	<string name="AvatarNameNobody">
 		(personne)
@@ -403,7 +403,7 @@
 		Oui
 	</string>
 	<string name="texture_loading">
-		Chargement en cours...
+		Chargement...
 	</string>
 	<string name="worldmap_offline">
 		Hors ligne
diff --git a/indra/newview/skins/default/xui/ja/alerts.xml b/indra/newview/skins/default/xui/ja/alerts.xml
index 9fb7a12..2a915f5 100644
--- a/indra/newview/skins/default/xui/ja/alerts.xml
+++ b/indra/newview/skins/default/xui/ja/alerts.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <alerts>
 	<global name="skipnexttime">
 		今後は表示しない
@@ -383,22 +383,22 @@ Studio exhibitのウェブ・ページで確認してください。
 	</alert>
 	<alert name="ClickWebProfileHelpAvatar">
 		<message name="message">
-			この住人がウェブプロフィールURLを設定している場合は、以下のことが可能です。
- * そのページを内蔵ブラウザーで表示するには、 [ロード]をクリックします。
- * そのページを外部ブラウザーで表示するには、 [ロード]-[開く]をクリックします。
- * 別のページにアクセスしてしまい、 住人のウェブ・プロフィールに戻りたい時は、 [ロード]-[ホームURL]をクリックします。
+			この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です。
+ * [ロード]をクリックし、このウェブ・タブ内でページを表示
+ * [ロード] &gt; &apos;外部ブラウザ&apos; をクリックし、ディフォルトのウェブ・ブラウザでページを表示
+ * [ロード] &gt; &apos;ホームURL&apos; をクリックし、他のページからこの住人のウェブ・プロフィールに戻る
  
-自分のプロフィールを表示しているときは、任意のURLをウェブプロフィールとして入力し、[OK]をクリックして設定できます。
-プロフィールを見た他の住人は、そのURLにアクセスすることができます。
+自分のプロフィールに任意のURLを入力しOKをクリックして、ウェブ・プロフィールとして設定することができます。
+それを見た他の住人がそのサイトを訪れることができます。
 		</message>
 	</alert>
 	<alert name="ClickWebProfileNoWebHelpAvatar">
 		<message name="message">
-			この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です:
-*そのページをデフォルトの外部ウェブ・ブラウザーで表示するには、[開く]をクリックします。
+			この住人がウェブ・プロフィールURLを設定している場合は、以下のことが可能です。
+ * Openをクリックし、ディフォルトのウェブ・ブラウザでページを表示
  
-自分のプロフィールを表示しているときは、任意のURLをウェブ・プロフィールとして入力できます。
-プロフィールを見た住人は、そのURLにアクセスすることができます。
+自分のプロフィールに任意のURLを入力しOKをクリックして、ウェブ・プロフィールとして設定することができます。
+それを見た他の住人がそのサイトを訪れることができます。
 		</message>
 	</alert>
 	<alert name="ReputationMinGreaterThanMax">
@@ -468,8 +468,8 @@ Studio exhibitのウェブ・ページで確認してください。
 	</alert>
 	<alert name="JoinGroupCannotAfford">
 		<message name="message">
-			このグループに参加するにはL$[COST]かかります。
-残金不足のため、このグループに参加できません。
+			このグループに加入するには、L$[COST]必要です。
+L$が不足しているのでこのグループに参加することができません。
 		</message>
 	</alert>
 	<alert name="LandBuyPass">
@@ -716,14 +716,6 @@ Studio exhibitのウェブ・ページで確認してください。
 			まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
 		</message>
 	</alert>
-	<alert name="MustHaveAccountToLogInNoLinks">
-		<message name="message">
-			[SECOND_LIFE]への接続にはアカウントが必要です。
-		</message>
-		<option name="OK">
-			閉じる
-		</option>
-	</alert>
 	<alert name="MustHaveAccountToLogIn">
 		<message name="message">
 			おっと! 記入漏れがありますよ。
@@ -1573,12 +1565,12 @@ www.secondlife.comに戻って、新規アカウントの作成を行います
 	</alert>
 	<alert name="InsufficientFundsToUploadFile">
 		<message name="message">
-			ファイルをアップロードするには資金不足です:価格はL$[COST]ですが、残金はL$[BALANCE]です。
+			L$不足のため、ファイルのアップロードができません。 必要金額はL$[COST], 残高はL$[BALANCE]です。
 		</message>
 	</alert>
 	<alert name="InsufficientFundsToFinishUpload">
 		<message name="message">
-			ファイル[FILE]のアップロードを完了するには資金不足です:価格はL$[COST]ですが、残金はL$[BALANCE]です。
+			L$不足のため、[FILE]のアップロードができません。 必要金額はL$[COST], 残高はL$[BALANCE]です。
 		</message>
 	</alert>
 	<alert name="CannotUploadReason">
@@ -2078,6 +2070,9 @@ L$は贈与されません。
 
 [NAME] にフレンドシップを送りますか?
 		</message>
+		<editline name="editline">
+			フレンドとして登録してくれますか?
+		</editline>
 		<option name="Offer">
 			OK
 		</option>
@@ -2092,7 +2087,7 @@ L$は贈与されません。
 [NAME] にフレンドシップのオファーをしますか?
 		</message>
 		<editline name="editline">
-			私のフレンドになっていただけますか?
+			フレンドとして登録してくれますか?
 		</editline>
 		<option name="Offer">
 			OK
@@ -2523,7 +2518,7 @@ F1キーを押してください。
 	</alert>
 	<alert name="NotEnoughCurrency">
 		<message name="message">
-			[NAME] L$ [PRICE] 残金が足りません。
+			[NAME] L$ [PRICE] 残高不足のため実行不可です。
 		</message>
 	</alert>
 	<alert name="GrantedModifyRights">
@@ -3240,6 +3235,7 @@ F1キーを押してください。
 			今あなたの不動産にいる人全員に送る
 短いメッセージを入力してください。.
 		</message>
+		<editline name="editline"/>
 		<option name="OK">
 			OK
 		</option>
@@ -3527,6 +3523,7 @@ L$[AMOUNT]で、このクラシファイド広告を今すぐ公開しますか
 			この地域にいる人全員に送る
 短いメッセージを入力してください。
 		</message>
+		<editline name="editline"/>
 		<option name="OK">
 			OK
 		</option>
@@ -4190,17 +4187,15 @@ Linden社所有のメインランドの不動産での太陽の位置に
 	</alert>
 	<alert name="HelpReportAbuseEmailLL">
 		<message name="message">
-			このツールは利用規約違反とコミュニティースタンダード違反の 
-報告に使用してください。 参照:
+			利用規約違反とコミュニティースタンダード違反の報告にこのツールをご使用ください。 参照:
 
 http://secondlife.com/corporate/tos.php 
 http://secondlife.com/corporate/cs.php
 
-利用規約違反とコミュニティースタンダード違反に関する全てのレポートは 
-調査され、解決されます。 以下のPolice Blotterで 
-解決の確認をすることができます:
+利用規約違反とコミュニティースタンダード違反に関する全てのレポートは、調査され、解決されます。 
+以下のリンク先のIncident Reportにてその確認をすることができます。
 
-http://secondlife.com/community/blotter.php
+http://secondlife.com/support/incidentreport.php
 		</message>
 	</alert>
 	<alert name="HelpReportAbuseEmailEO">
@@ -4282,18 +4277,22 @@ http://secondlife.com/community/support.php
 	</alert>
 	<alert name="HelpReportAbuseContainsCopyright">
 		<message name="message">
-			親愛なる住人の皆様へ
-
-知的所有権の侵害を報告する場合は、以下のとおり正確に報告してください。
-
-(1) 嫌がらせの処理。 住人がSecond Lifeの許可システムを不当に使用し、知的所有権が侵害されていると考えられる場合は、嫌がらせ報告を提出することができます。許可システムを不当に使用する手段としては、たとえば、CopyBotまたは類似したコピー・ツールがあります。 嫌がらせ対応担当チームが調査を行い、Second Lifeのコミュニティ・スタンダードまたは利用規約に違反する態度に対しては適切な懲罰処分が行われます。 ただし、嫌がらせ対応担当チームでは、コンテンツをSecond Lifeワールドから削除するリクエストに対する処理または回答は行いません。
+			Dear Resident,
+ 
+知的財産の侵害に関する報告を行う際には、以下の点に注意してください。
 
-(2) DMCAまたはコンテンツの削除処理。 Second Lifeからのコンテンツの削除をリクエストするには、http://secondlife.com/corporate/dmca.phpのDMCAポリシーにある、侵害に関する有効な通知を提出する必要があります。
+(1) 嫌がらせの報告のプロセス。Second Lifeの権限システムを悪用している住人を見つけたら、嫌がらせの報告を行ってください。
+例えばコピーBotの使用、それに似たツールの使用による知的財産権の侵害があります。
+アビューズチームは調査に基づきSecond Lifeのコミュニティースタンダードや利用規約に違反する行為と判断された場合には適切な処置を行っています。
+ただし、コンテンツをSecond Lifeから撤去してほしい、といった要望にはアビューズチームは応えることができません。
 
-嫌がらせの処理を継続する場合は、このウインドウを閉じ、報告を提出してください。
+(2) DMCA(デジタルミレニアム著作権法)及びコンテンツ撤去プロセス。 Second Lifeからのコンテンツの撤去をリクエストするには、著作権侵害通知の提出を行う必要があります。
+参照:http://secondlife.com/corporate/dmca.php
 
-ご協力ありがとうございます。
+この件に関する嫌がらせの報告を続ける際は、このウィンドウを閉じてください。選択すべきカテゴリは「知的財産の侵害 &gt; コピーBot及び権限の悪用」が適しているかもしれませんのでご確認ください。
 
+Thank you,
+ 
 Linden Lab
 		</message>
 	</alert>
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 55df129..1abab03 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -1,285 +1,260 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="floaterland" title="土地情報">
 	<tab_container name="landtab">
 		<panel label="一般" name="land_general_panel">
-			<text type="string" length="1" name="Name:">
+			<text length="1" name="Name:" type="string">
 				名前:
 			</text>
-			<text type="string" length="1" name="Description:">
+			<line_editor name="Name"/>
+			<text length="1" name="Description:" type="string">
 				説明:
 			</text>
-			<text type="string" length="1" name="Owner:">
+			<text length="1" name="Owner:" type="string">
 				オーナー:
 			</text>
-			<text type="string" length="1" name="OwnerText">
+			<text length="1" name="OwnerText" type="string">
 				Leyla Linden
 			</text>
-			<button label="プロフィール..." label_selected="プロフィール..."
-			     name="Profile..." />
-			<text type="string" length="1" name="Group:">
+			<button label="プロフィール..." label_selected="プロフィール..." name="Profile..."/>
+			<text length="1" name="Group:" type="string">
 				グループ:
 			</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 type="string" length="1" name="For Sale:">
+			<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 length="1" name="For Sale:" type="string">
 				売り出し中:
 			</text>
-			<text type="string" length="1" name="Not for sale.">
+			<text length="1" name="Not for sale." type="string">
 				販売対象外。
 			</text>
-			<text type="string" length="1" name="For Sale: Price L$[PRICE].">
+			<text length="1" name="For Sale: Price L$[PRICE]." type="string">
 				料金:L$[PRICE]
 			</text>
-			<button label="土地を販売..." label_selected="土地を販売..."
-			     name="Sell Land..." />
-			<text type="string" length="1" name="For sale to">
+			<button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/>
+			<text length="1" name="For sale to" type="string">
 				販売先:[BUYER]
 			</text>
-			<text type="string" length="1" name="Sell with landowners objects in parcel.">
+			<text length="1" name="Sell with landowners objects in parcel." type="string">
 				販売に含めるオブジェクト。
 			</text>
-			<text type="string" length="1" name="Selling with no objects in parcel.">
+			<text length="1" name="Selling with no objects in parcel." type="string">
 				販売に含めないオブジェクト。
 			</text>
-			<button label="土地販売の取り消し"
-			     label_selected="土地販売の取り消し" name="Cancel Land Sale" />
-			<text type="string" length="1" name="Claimed:">
+			<button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/>
+			<text length="1" name="Claimed:" type="string">
 				要求:
 			</text>
-			<text type="string" length="1" name="DateClaimText">
+			<text length="1" name="DateClaimText" type="string">
 				2006年8月15日火曜日13:47:25
 			</text>
-			<text type="string" length="1" name="PriceLabel">
+			<text length="1" name="PriceLabel" type="string">
 				面積:
 			</text>
-			<text type="string" length="1" name="PriceText">
+			<text length="1" name="PriceText" type="string">
 				4048平方メートル
 			</text>
-			<text type="string" length="1" name="Traffic:">
+			<text length="1" name="Traffic:" type="string">
 				交通量:
 			</text>
-			<text type="string" length="1" name="DwellText">
+			<text length="1" name="DwellText" type="string">
 				誤
 			</text>
-			<button label="土地を購入..." label_selected="土地を購入..."
-			     name="Buy Land..." />
-			<button label="グループ用に購入..."
-			     label_selected="グループ用に購入..." name="Buy For Group..." />
-			<button label="パスを購入..." label_selected="パスを購入..."
-			     name="Buy Pass..."
-			     tool_tip="パスはこの土地への一時的なアクセスを許可します。" />
-			<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="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。" />
-			<text name="new users only">
+			<button label="土地を購入..." label_selected="土地を購入..." name="Buy Land..."/>
+			<button label="グループ用に購入..." label_selected="グループ用に購入..." name="Buy For Group..."/>
+			<button label="パスを購入..." label_selected="パスを購入..." name="Buy Pass..." tool_tip="パスはこの土地への一時的なアクセスを許可します。"/>
+			<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="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/>
+			<string name="new users only">
 				新規ユーザーのみ
-			</text>
-			<text name="anyone">
+			</string>
+			<string name="anyone">
 				誰でも
-			</text>
-			<text name="area_text">
+			</string>
+			<string name="area_text">
 				エリア
-			</text>
-			<text name="area_size_text">
+			</string>
+			<string name="area_size_text">
 				[AREA]平方メートル
-			</text>
-			<text name="auction_id_text">
+			</string>
+			<string name="auction_id_text">
 				オークションID: [ID]
-			</text>
-			<text name="need_tier_to_modify">
+			</string>
+			<string name="need_tier_to_modify">
 				この土地を修正変更するには、購入を承認する必要があります。
-			</text>
-			<text name="group_owned_text">
+			</string>
+			<string name="group_owned_text">
 				(グループ所有)
-			</text>
-			<text name="profile_text">
+			</string>
+			<string name="profile_text">
 				プロフィール...
-			</text>
-			<text name="info_text">
+			</string>
+			<string name="info_text">
 				インフォ...
-			</text>
-			<text name="public_text">
+			</string>
+			<string name="public_text">
 				(公共)
-			</text>
-			<text name="none_text">
+			</string>
+			<string name="none_text">
 				(なし)
-			</text>
-			<text name="sale_pending_text">
+			</string>
+			<string name="sale_pending_text">
 				(購入審査中)
-			</text>
+			</string>
 			<string name="no_selection_text">
 				区画が選定されていません。
 [世界]メニュー&gt;[土地情報]に進むか、別の区画を選択して、詳細を表示します。
 			</string>
 		</panel>
 		<panel label="約款" name="land_covenant_panel">
-			<text type="string" length="1" name="covenant_timestamp_text">
+			<text length="1" name="covenant_timestamp_text" type="string">
 				最後の更新1969年12月31日水曜日16:00:00
 			</text>
-			<text type="string" length="1" name="region_name_lbl">
+			<text length="1" name="region_name_lbl" type="string">
 				地域:
 			</text>
-			<text type="string" length="1" name="region_name_text">
+			<text length="1" name="region_name_text" type="string">
 				Leyla
 			</text>
-			<text type="string" length="1" name="estate_name_lbl">
+			<text length="1" name="estate_name_lbl" type="string">
 				不動産:
 			</text>
-			<text type="string" length="1" name="estate_name_text">
+			<text length="1" name="estate_name_text" type="string">
 				メインランド
 			</text>
-			<text type="string" length="1" name="estate_owner_lbl">
+			<text length="1" name="estate_owner_lbl" type="string">
 				不動産オーナー:
 			</text>
-			<text type="string" length="1" name="estate_owner_text">
+			<text length="1" name="estate_owner_text" type="string">
 				(なし)
 			</text>
-			<text type="string" length="1" name="resellable_clause">
+			<text length="1" name="resellable_clause" type="string">
 				この地域で購入した土地は、再販できないことがあります。
 			</text>
-			<text type="string" length="1" name="changeable_clause">
+			<text length="1" name="changeable_clause" type="string">
 				この地域で購入した土地は、統合/再分割できないことがあります。
 			</text>
-			<text_editor type="string" length="1" name="covenant_editor">
+			<text_editor length="1" name="covenant_editor" type="string">
 				この不動産には約款がありません。
 			</text_editor>
-			<text name="can_resell">
+			<string name="can_resell">
 				この地域で購入した土地は、再販できます。
-			</text>
-			<text name="can_not_resell">
+			</string>
+			<string name="can_not_resell">
 				この地域で購入した土地は、再販できないことがあります。
-			</text>
-			<text name="can_change">
+			</string>
+			<string name="can_change">
 				この地域で購入した土地は、統合または再分割できます。
-			</text>
-			<text name="can_not_change">
+			</string>
+			<string name="can_not_change">
 				この地域で購入した土地は、統合/再分割できないことがあります。
-			</text>
+			</string>
 		</panel>
 		<panel label="オブジェクト" name="land_objects_panel">
 			<text name="parcel_object_bonus">
 				地域オブジェクトボーナス要因: [BONUS]
 			</text>
-			<text type="string" length="1" name="Simulator primitive usage:" width="500">
+			<text length="1" name="Simulator primitive usage:" type="string" width="500">
 				シミュレータの基本要素使用状況:
 			</text>
 			<text left="200" name="objects_available">
 				[MAX]の内[COUNT]([AVAILABLE]利用可能)
 			</text>
-			<text left="200" name="objects_available_text">
+			<string left="200" name="objects_available_text">
 				[MAX]の内[COUNT]([AVAILABLE]利用可能)
-			</text>
-			<text left="200" name="objects_deleted_text">
+			</string>
+			<string left="200" name="objects_deleted_text">
 				[MAX]の内[COUNT]([DELETED]を削除)
-			</text>
-			<text type="string" length="1" name="Primitives parcel supports:" width="200">
+			</string>
+			<text length="1" name="Primitives parcel supports:" type="string" width="200">
 				区画でサポートされる基本要素数:
 			</text>
-			<text type="string" length="1" left="200" name="object_contrib_text">
+			<text left="200" length="1" name="object_contrib_text" type="string">
 				[COUNT]
 			</text>
-			<text type="string" length="1" name="Primitives on parcel:">
+			<text length="1" name="Primitives on parcel:" type="string">
 				区画上の基本要素数:
 			</text>
-			<text type="string" length="1" left="200" name="total_objects_text">
+			<text left="200" length="1" name="total_objects_text" type="string">
 				[COUNT]
 			</text>
-			<text type="string" length="1" name="Owned by parcel owner:" width="300">
+			<text length="1" name="Owned by parcel owner:" type="string" width="300">
 				区画オーナーによる所有:
 			</text>
-			<text type="string" length="1" left="200" name="owner_objects_text">
+			<text left="200" length="1" name="owner_objects_text" type="string">
 				[COUNT]
 			</text>
-			<button label="表示" label_selected="表示" name="ShowOwner" right="-145" />
-			<button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15"
-			     tool_tip="オブジェクトをオーナーに返却します" />
-			<text type="string" length="1" name="Set to group:">
+			<button label="表示" label_selected="表示" name="ShowOwner" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text length="1" name="Set to group:" type="string">
 				グループに設定:
 			</text>
-			<text type="string" length="1" left="200" name="group_objects_text">
+			<text left="200" length="1" name="group_objects_text" type="string">
 				[COUNT]
 			</text>
-			<button label="表示" label_selected="表示" name="ShowGroup" right="-145" />
-			<button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15"
-			     tool_tip="オブジェクトをオーナーに返却します" />
-			<text type="string" length="1" name="Owned by others:">
+			<button label="表示" label_selected="表示" name="ShowGroup" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text length="1" name="Owned by others:" type="string">
 				他人による所有:
 			</text>
-			<text type="string" length="1" left="200" name="other_objects_text">
+			<text left="200" length="1" name="other_objects_text" type="string">
 				[COUNT]
 			</text>
-			<button label="表示" label_selected="表示" name="ShowOther" right="-145" />
-			<button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15"
-			     tool_tip="オブジェクトをオーナーに返却します" />
-			<text type="string" length="1" name="Selected / sat upon:">
+			<button label="表示" label_selected="表示" name="ShowOther" right="-145"/>
+			<button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/>
+			<text length="1" name="Selected / sat upon:" type="string">
 				選択済み/決定済み:
 			</text>
-			<text type="string" length="1" left="200" name="selected_objects_text">
+			<text left="200" length="1" name="selected_objects_text" type="string">
 				[COUNT]
 			</text>
-			<text type="string" length="1" name="Autoreturn" width="500">
+			<text length="1" name="Autoreturn" type="string" width="500">
 				他の住人のオブジェクトの自動返却(分、オフの設定は0)
 			</text>
-			<line_editor left_delta="5" name="clean other time" right="-80" />
-			<text type="string" length="1" name="Object Owners:" width="150">
+			<line_editor left_delta="5" name="clean other time" right="-80"/>
+			<text length="1" name="Object Owners:" type="string" width="150">
 				オブジェクトのオーナー:
 			</text>
-			<button label="リスト更新" label_selected="リスト更新" left="146"
-			     name="Refresh List" />
-			<button label="オブジェクトの返却..."
-			     label_selected="オブジェクトの返却..." left="256"
-			     name="Return objects..." />
-			<button label="" label_selected="" name="Type" tool_tip="種類で振り分け" />
-			<button label="名前" label_selected="名前" name="Name"
-			     tool_tip="名前で振り分け" />
-			<button label="カウント" label_selected="カウント" name="Count"
-			     tool_tip="カウントで振り分け" />
+			<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 label="名前" name="name" />
-				<column label="カウント" name="count" />
+				<column label="タイプ" name="type"/>
+				<column name="online_status"/>
+				<column label="名前" name="name"/>
+				<column label="カウント" name="count"/>
+				<column label="Most Recent" name="mostrecent"/>
 			</name_list>
-			/&gt;
 		</panel>
 		<panel label="オプション" name="land_options_panel">
-			<text type="string" length="1" name="allow_label">
+			<text length="1" name="allow_label" type="string">
 				他の住人に以下を許可:
 			</text>
-			<check_box label="地形を編集" name="edit land check" />
-			<check_box label="ランドマーク作成" name="check landmark" />
-			<check_box label="飛行" name="check fly" />
-			<text type="string" length="1" left="138" name="allow_label2" width="144">
+			<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" length="1" name="allow_label2" type="string" width="144">
 				オブジェクトの作成:
 			</text>
-			<check_box label="すべての住人" left="280" name="edit objects check" />
-			<check_box label="グループ" left="380" name="edit group objects check" />
-			<text type="string" length="1" left="138" name="allow_label3" width="144">
+			<check_box label="すべての住人" left="280" name="edit objects check"/>
+			<check_box label="グループ" left="380" name="edit group objects check"/>
+			<text left="138" length="1" name="allow_label3" type="string" width="144">
 				オブジェクト・エントリ:
 			</text>
-			<check_box label="すべての住人" left="280" name="all object entry check" />
-			<check_box label="グループ" left="380" name="group object entry check" />
-			<text type="string" length="1" left="138" name="allow_label4" width="144">
+			<check_box label="すべての住人" left="280" name="all object entry check"/>
+			<check_box label="グループ" left="380" name="group object entry check"/>
+			<text left="138" length="1" name="allow_label4" type="string" width="144">
 				スクリプト実行:
 			</text>
-			<check_box label="すべての住人" left="280" name="check other scripts" />
-			<check_box label="グループ" left="380" name="check group scripts" />
-			<text type="string" length="1" name="land_options_label">
+			<check_box label="すべての住人" left="280" name="check other scripts"/>
+			<check_box label="グループ" left="380" name="check group scripts"/>
+			<text length="1" name="land_options_label" type="string">
 				土地オプション:
 			</text>
-			<check_box label="安全(ダメージなし)" name="check safe" />
-			<check_box label="プッシュを制限" name="PushRestrictCheck"
-			     tool_tip="llPushObjectが機能するのは、区画オーナーのスクリプトを通じて使用された場合か、またはプッシュ元がオーナーになっているスクリプトを通じて使用された場合だけです。" />
-			<check_box label="検索に表示>(週L$30)以下の場所"
-			     name="ShowDirectoryCheck"
-			     tool_tip="検索結果で、この区画を人に見せる" />
+			<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">
 				<combo_item name="AnyCategory">
 					全カテゴリー
@@ -321,66 +296,59 @@
 					その他
 				</combo_item>
 			</combo_box>
-			<check_box label="成人向けコンテンツ" name="MatureCheck"
-			     tool_tip="あなたの区画情報またはコンテンツが成人向けと見なされています。" />
-			<check_box label="リストをウェブ上で公開" name="PublishCheck"
-			     tool_tip="自分の区画情報をウェブ上で公開します。" />
-			<button label="?" label_selected="?" name="?" />
-			<text type="string" length="1" name="Snapshot:">
+			<button label="?" label_selected="?" name="?"/>
+			<check_box label="成人向けコンテンツ" name="MatureCheck" tool_tip="あなたの区画情報またはコンテンツが成人向けと見なされています。"/>
+			<text length="1" name="Snapshot:" type="string">
 				スナップショット:
 			</text>
-			<texture_picker label="" left="116" name="snapshot_ctrl"
-			     tool_tip="写真をクリックして選択" />
-			<text type="string" length="1" name="Landing Point: (none)">
-				着地点:(なし)
-			</text>
+			<texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/>
 			<text name="landing_point">
 				着陸地点: [LANDING]
 			</text>
-			<text name="landing_point_none">
+			<string name="landing_point_none">
 				(なし)
-			</text>
-			<button label="設定" label_selected="設定" name="Set"
-			     tool_tip="あなたのアバターのロケーションに着地点を設定してください。 この土地区画の中でなければなりません。" />
-			<button label="クリア" label_selected="クリア" name="Clear"
-			     tool_tip="着地点をクリアしてください。" />
-			<text type="string" length="1" name="Teleport Routing: ">
+			</string>
+			<button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地地点の設定を行います。この区画内に立って行ってください。"/>
+			<button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリアしてください。"/>
+			<text length="1" name="Teleport Routing: " type="string">
 				テレポート・ルート:
 			</text>
-			<combo_box name="landing type"
-			     tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
-				<combo_item type="string" length="1" name="Blocked">
+			<combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
+				<combo_item length="1" name="Blocked" type="string">
 					ブロック済み
 				</combo_item>
-				<combo_item type="string" length="1" name="LandingPoint">
+				<combo_item length="1" name="LandingPoint" type="string">
 					着地点
 				</combo_item>
-				<combo_item type="string" length="1" name="Anywhere">
+				<combo_item length="1" name="Anywhere" type="string">
 					どこでも
 				</combo_item>
 			</combo_box>
-			<text name="push_restrict_text">
+			<string name="push_restrict_text">
 				プッシングを制限
-			</text>
-			<text name="push_restrict_region_text">
-				プッシングを制限 (地域無効)
-			</text>
+			</string>
+			<string name="push_restrict_region_text">
+				プッシングを制限 (地域優先)
+			</string>
 		</panel>
 		<panel label="メディア" name="land_media_panel">
-			<text name="at URL:">
-				URL:
-			</text>
-			<button label="設定..." label_selected="設定..." name="set_media_url" />
 			<text name="with media:">
 				タイプ:
 			</text>
-			<combo_box name="media type"
-			     tool_tip="URL が動画、ウェブ・ページ、その他のメディアの場合に指定します" />
+			<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="[再生]/[ロード]ボタンの隣に表示されるテキスト" />
+			<line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/>
+			<text length="1" name="Media texture:" type="string">
+				テクスチ
+ャ取替:
+			</text>
+			<texture_picker label="" name="media texture" tool_tip="写真をクリックして選択"/>
 			<text name="replace_texture_help">
 				[再生]矢印をクリックすると、このテクスチャーを使用するオブジェクトに
 動画またはウェブ・ページが表示されます。
@@ -389,20 +357,15 @@
 				メディア
 オプション:
 			</text>
-			<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 のままにします。">
+			<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 のままにします。" />
+			<spinner name="media_size_width" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
+			<spinner name="media_size_height" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/>
 			<text name="pixels">
 				ピクセル
 			</text>
@@ -412,23 +375,7 @@
 			<text name="Sound:">
 				サウンド:
 			</text>
-			<check_box label="空間音響をこの区画だけに限定" name="check sound local" />
-			<text type="string" length="1" name="Music URL:">
-				ミュージックURL:
-			</text>
-			<text type="string" length="1" name="Media texture:">
-				テクスチ
-ャ取替:
-			</text>
-			<text type="string" length="1" name="Replace this texture:">
-				このテクスチャーを置換:
-			</text>
-			<texture_picker label="" name="media texture" tool_tip="写真をクリックして選択" />
-			<text type="string" length="1" name="with content from this URL:">
-				この URLからのコンテンツ:
-			</text>
-			<check_box label="スケールを自動設定" name="media_auto_scale"
-			     tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。" />
+			<check_box label="空間音響をこの区画だけに限定" name="check sound local"/>
 			<text name="Voice settings:">
 				ボイス:
 			</text>
@@ -445,23 +392,20 @@
 			</radio_group>
 		</panel>
 		<panel label="アクセス" name="land_access_panel">
-			<text type="string" length="1" name="Limit access to this parcel to:">
+			<text length="1" name="Limit access to this parcel to:" type="string">
 				この区画にアクセス
 			</text>
-			<check_box label="パブリック・アクセスを許可" name="public_access" />
+			<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を参照してください。" />
+			<check_box label="Linden Labに支払い情報を登録していない住人" name="limit_payment" tool_tip="年齢未確認の住人を排除する"/>
+			<check_box label="年齢確認を済ませていない成人の住人" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人を排除する詳細については、support.secondlife.comを参照してください。"/>
 			<string name="estate_override">
 				1つ以上のオプションが、不動産レベルで設定されています。
 			</string>
-			<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck"
-			     tool_tip="[一般]タブで、グループを選択してください。" />
+			<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/>
+			<check_box label="パスを販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/>
 			<combo_box name="pass_combo">
 				<combo_item name="Anyone">
 					誰でも
@@ -470,45 +414,20 @@
 					グループ
 				</combo_item>
 			</combo_box>
+			<spinner label="L$建て価格:" name="PriceSpin"/>
+			<spinner label="アクセス時間:" name="HoursSpin"/>
 			<text label="常に許可" name="AllowedText">
 				許可された住人
 			</text>
-			<button label="追加..." label_selected="追加..." name="add_allowed" />
-			<button label="削除" label_selected="削除" name="remove_allowed" />
-			<check_box label="禁止" name="BanCheck">
+			<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">
 				禁止された住人
-			</check_box>
-			<name_list name="AccessList" tool_tip="([LISTED]リスト入り、[MAX]最大)">
-				<column label="許可された住人" name="name" />
-			</name_list>
-			<button label="追加..." label_selected="追加..." name="Add..." />
-			<button label="削除" label_selected="削除" name="Remove" />
-			<check_box label="パスを販売:" name="PassCheck"
-			     tool_tip="この区画への一時的なアクセスを許可" />
-			<spinner label="L$建て価格:" name="PriceSpin" />
-			<spinner label="アクセス時間:" name="HoursSpin" />
-			<name_list name="BannedList" tool_tip="([LISTED]リスト入り、[MAX]最大)" />
-			<button label="追加..." label_selected="追加..." name="add_banned" />
-			<button label="削除" label_selected="削除" name="remove_banned" />
-		</panel>
-		<panel label="禁止" name="land_ban_panel">
-			<check_box
-			     label="これらのアバターを禁止する:([LISTED]リスト済み、[MAX]最大)"
-			     name="LandBanCheck" />
-			<name_list name="LandBanList">
-				<column label="禁止された住人" name="name" />
-			</name_list>
-			<button label="追加..." label_selected="追加..." name="Add..." />
-			<button label="削除" label_selected="削除" name="Remove" />
-			<text type="string" length="1" name="Deny by Payment Status:">
-				支払い状況により拒否:
-			</text>
-			<check_box label="支払い情報の登録がないものを拒否"
-			     name="DenyAnonymousCheck" />
-			<check_box label="支払い情報の登録があるものを拒否"
-			     name="DenyIdentifiedCheck" />
-			<check_box label="支払い情報が使用されているものを拒否"
-			     name="DenyTransactedCheck" />
+			</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_beacons.xml b/indra/newview/skins/default/xui/ja/floater_beacons.xml
new file mode 100644
index 0000000..179d017
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_beacons.xml
@@ -0,0 +1,15 @@
+<?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>
diff --git a/indra/newview/skins/default/xui/ja/floater_chat_history.xml b/indra/newview/skins/default/xui/ja/floater_chat_history.xml
index 41592a3..7b92c12 100644
--- a/indra/newview/skins/default/xui/ja/floater_chat_history.xml
+++ b/indra/newview/skins/default/xui/ja/floater_chat_history.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="chat floater" title="ローカル・チャット">
 	<string name="ringing">
 		インワールドボイスチャットに接続中...
@@ -42,6 +42,9 @@
 					<flyout_button_item name="say_item">
 						発言
 					</flyout_button_item>
+					<flyout_button_item name="whisper_item">
+						ささやく
+					</flyout_button_item>
 				</flyout_button>
 			</panel>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
index 7ebcacd..61665a1 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
@@ -22,7 +22,7 @@
 	<text name="key_label">
 		ショートカット・キー:
 	</text>
-	<combo_box label="なし" name="modifier_combo"/>
+	<combo_box label="なし" name="modifier_combo" left="160"/>
 	<combo_box label="なし" name="key_combo"/>
 	<text name="library_label">
 		ライブラリ:
@@ -57,7 +57,7 @@
 	</radio_group>
 	<check_box label="アニメーションが完了するまで" name="wait_anim_check"/>
 	<check_box label="秒表示の時間" name="wait_time_check"/>
-	<check_box label="アクティブ" name="active_check" tool_tip="アクティブ・ジェスチャーは、トリガー・フレーズを使うか、またはホット・キーを押すことによってトリガーできます。  1つのショートカット・キーに2つ以上のジェスチャーが割り当てられた場合、そのジェスチャーは両方ともアクティブではなくなります。"/>
+	<check_box label="アクティブ" left="120" name="active_check" tool_tip="アクティブ・ジェスチャーは、トリガー・フレーズを使うか、またはホット・キーを押すことによってトリガーできます。  1つのショートカット・キーに2つ以上のジェスチャーが割り当てられた場合、そのジェスチャーは両方ともアクティブではなくなります。"/>
 	<button label="プレビュー" name="preview_btn"/>
 	<button label="保存" name="save_btn"/>
 </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 29dfb2a..2112e00 100644
--- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
@@ -1,5 +1,7 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?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>
@@ -15,16 +17,13 @@
 	<text name="pos_title">
 		位置:
 	</text>
-	<texture_picker name="screenshot" />
-	<check_box label="スクリーンショットを含める" name="screen_check" />
 	<text name="pos_field">
 		{128.1, 128.1, 15.4}
 	</text>
-	<button label="" label_selected="" name="pick_btn"
-	     tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定" />
 	<text name="select_object_label">
 		ボタンを使ってオブジェクトを選択:
 	</text>
+	<button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定"/>
 	<text name="object_name_label">
 		名前:
 	</text>
@@ -37,11 +36,7 @@
 	<text name="owner_name">
 		Hendrerit Vulputate
 	</text>
-	<combo_box name="category_combo"
-	     tool_tip="Category -- select the category that best describes this report">
-		<combo_item name="Selectcategory">
-			カテゴリーを選択
-		</combo_item>
+	<combo_box name="category_combo" >
 		<combo_item name="Select_category">
 			カテゴリーを選択
 		</combo_item>
@@ -63,14 +58,11 @@
 		<combo_item name="Assault__Weapons_testing_sandbox">
 			攻撃&gt;武器テスト用サンドボックス
 		</combo_item>
-		<combo_item name="Copyright_or_intellectual_property_violation">
-			著作権または知的所有権に関する違反
-		</combo_item>
 		<combo_item name="Commerce__Failure_to_deliver_product_or_service">
 			商取引&gt;製品またはサービスの提供が行われない
 		</combo_item>
-		<combo_item name="Disclosure__First_Life_information">
-			開示&gt;1st Lifeの情報
+		<combo_item name="Disclosure__Real_world_information">
+			開示 &gt; リアルワールドの情報
 		</combo_item>
 		<combo_item name="Disclosure__Remotely_monitoring chat">
 			開示&gt;離れたところからチャットをモニターしている
@@ -135,26 +127,14 @@
 		<combo_item name="Indecency__Mature_content_in_PG_region">
 			わいせつ&gt;PG地域で成人向けと見なされるコンテンツ
 		</combo_item>
-		<combo_item name="Intolerance">
-			不寛容
-		</combo_item>
-		<combo_item name="Harassment">
-			嫌がらせ
+		<combo_item name="Intellectual_property_infringement_Content_Removal">
+			知的財産の侵害 &gt; コンテンツの撤去
 		</combo_item>
-		<combo_item name="Assault">
-			攻撃
+		<combo_item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit">
+			知的財産の侵害 &gt; コピーBot及び権限の悪用
 		</combo_item>
-		<combo_item name="Disclosure">
-			開示
-		</combo_item>
-		<combo_item name="Indecency">
-			わいせつ
-		</combo_item>
-		<combo_item name="Age">
-			年齢
-		</combo_item>
-		<combo_item name="Parcel">
-			区画
+		<combo_item name="Intolerance">
+			不寛容
 		</combo_item>
 		<combo_item name="Land__Abuse_of_sandbox_resources">
 			土地&gt;サンドボックス・リソースの乱用
@@ -168,9 +148,6 @@
 		<combo_item name="Land__Encroachment__Trees_plants">
 			土地&gt;不法侵入&gt;樹木/植物
 		</combo_item>
-		<combo_item name="Trademark_violation">
-			商標権の侵害
-		</combo_item>
 		<combo_item name="Wagering_gambling">
 			賭け/ギャンブル
 		</combo_item>
@@ -181,10 +158,8 @@
 	<text name="abuser_name_title">
 		迷惑ユーザーの名前:
 	</text>
-	<button label="住人を選択" label_selected="" name="select_abuser"
-	     tool_tip="嫌がらせをした人の名前をリストから選択してください。" />
-	<check_box label="嫌がらせをした人の名前が不明" name="omit_abuser_name"
-	     tool_tip="嫌がらせをした人の名前を提供できないかについて、これを確認" />
+	<button label="住人を選択" label_selected="" name="select_abuser" tool_tip="嫌がらせをした人の名前をリストから選択してください。"/>
+	<check_box label="嫌がらせをした人の名前が不明" name="omit_abuser_name" tool_tip="嫌がらせをした人の名前を提供できないかについて、これを確認"/>
 	<text name="abuser_name_title2">
 		嫌がらせの起きた場所:
 	</text>
@@ -202,7 +177,6 @@
 	<text name="incomplete_title">
 		注意:不完全なレポートは調査されません。
 	</text>
-	<button label="嫌がらせの報告" label_selected="嫌がらせの報告"
-	     name="send_btn" />
-	<button label="取り消し" label_selected="取り消し" name="cancel_btn" />
+	<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
+	<button label="嫌がらせの報告" label_selected="嫌がらせの報告" name="send_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
index 1a59057..ac15c1f 100644
--- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
@@ -34,7 +34,7 @@
 	<text name="type_label2">
 		サイズ
 	</text>
-	<text name="format_label">
+	<text name="format_label" width="75">
 		フォーマット
 	</text>
 	<combo_box label="解像度" name="postcard_size_combo">
@@ -108,8 +108,8 @@
 			BMP
 		</combo_item>
 	</combo_box>
-	<spinner label="幅" name="snapshot_width"/>
-	<spinner label="高さ" name="snapshot_height"/>
+	<spinner label="幅" name="snapshot_width" label_width="25" width="90"/>
+	<spinner label="高さ" name="snapshot_height" label_width="30" left="115" width="90"/>
 	<check_box label="比率の制限" name="keep_aspect_check"/>
 	<slider label="画質" name="image_quality_slider"/>
 	<text name="layer_type_label">
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index ef68d38..0c7df77 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -1,265 +1,201 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu_bar name="Main Menu">
 	<menu label="ファイル" name="File">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" />
-		<menu_item_call label="画像をアップロード(L$[COST])..." name="Upload Image" />
-		<menu_item_call label="サウンドをアップロード(L$[COST])..." name="Upload Sound" />
-		<menu_item_call label="アニメーションをアップロード(L$[COST])..."
-		     name="Upload Animation" />
-		<menu_item_call label="大量アップロード(L$[COST]/ファイル)…"
-		     name="Bulk Upload" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_call label="ウィンドウを閉じる" name="Close Window" />
-		<menu_item_call label="全てのウィンドウを閉じる" name="Close All Windows" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_call label="テクスチャーを別名で保存..." name="Save Texture As..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="スナップショットを撮る" name="Take Snapshot" />
-		<menu_item_call label="スナップショットをディスクに保存"
-		     name="Snapshot to Disk" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu label="ウィンドウ・サイズを設定" name="Set Window Size">
-			<menu_item_call label="320x240" name="320x240" />
-			<menu_item_call label="640x480" name="640x480" />
-			<menu_item_call label="800x600" name="800x600" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_call label="720 x 480(NTSC)" name="720x480 (NTSC)" />
-			<menu_item_call label="768 x 576(PAL)" name="768x576 (PAL)" />
-		</menu>
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="終了" name="Quit" />
+		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
+		<menu_item_call label="画像をアップロード(L$[COST])..." name="Upload Image"/>
+		<menu_item_call label="サウンドをアップロード(L$[COST])..." name="Upload Sound"/>
+		<menu_item_call label="アニメーションをアップロード(L$[COST])..." name="Upload Animation"/>
+		<menu_item_call label="大量アップロード(L$[COST]/ファイル)…" name="Bulk Upload"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_call label="ウィンドウを閉じる" name="Close Window"/>
+		<menu_item_call label="全てのウィンドウを閉じる" name="Close All Windows"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_call label="テクスチャーを別名で保存..." name="Save Texture As..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="スナップショットを撮る" name="Take Snapshot"/>
+		<menu_item_call label="スナップショットをディスクに保存" name="Snapshot to Disk"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="終了" name="Quit"/>
 	</menu>
 	<menu label="編集" name="Edit">
-		<menu_item_call label="元に戻す" name="Undo" />
-		<menu_item_call label="やり直し" name="Redo" />
-		<menu_item_separator label="-----------" name="separator" />
-		<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_separator label="-----------" name="separator2" />
-		<menu_item_call label="検索..." name="Search..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="すべてを選択" name="Select All" />
-		<menu_item_call label="選択解除" name="Deselect" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_call label="複製" name="Duplicate" />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu label="オブジェクトを装着" name="Attach Object" />
-		<menu label="オブジェクトを取り外す" name="Detach Object" />
+		<menu_item_call label="元に戻す" name="Undo"/>
+		<menu_item_call label="やり直し" name="Redo"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<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_separator label="-----------" name="separator2"/>
+		<menu_item_call label="検索..." name="Search..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="すべてを選択" name="Select All"/>
+		<menu_item_call label="選択解除" name="Deselect"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="複製" name="Duplicate"/>
+		<menu_item_separator label="-----------" name="separator5"/>
+		<menu label="オブジェクトを装着" name="Attach Object"/>
+		<menu label="オブジェクトを取り外す" name="Detach Object"/>
 		<menu label="服を脱ぐ" name="Take Off Clothing">
-			<menu_item_call label="シャツ" name="Shirt" />
-			<menu_item_call label="ズボン" name="Pants" />
-			<menu_item_call label="靴" name="Shoes" />
-			<menu_item_call label="靴下" name="Socks" />
-			<menu_item_call label="ジャケット" name="Jacket" />
-			<menu_item_call label="手袋" name="Gloves" />
-			<menu_item_call label="(下着の)シャツ" name="Menu Undershirt" />
-			<menu_item_call label="(下着の)パンツ" name="Menu Underpants" />
-			<menu_item_call label="スカート" name="Skirt" />
-			<menu_item_call label="すべての服" name="All Clothes" />
+			<menu_item_call label="シャツ" name="Shirt"/>
+			<menu_item_call label="ズボン" name="Pants"/>
+			<menu_item_call label="靴" name="Shoes"/>
+			<menu_item_call label="靴下" name="Socks"/>
+			<menu_item_call label="ジャケット" name="Jacket"/>
+			<menu_item_call label="手袋" name="Gloves"/>
+			<menu_item_call label="(下着の)シャツ" name="Menu Undershirt"/>
+			<menu_item_call label="(下着の)パンツ" name="Menu Underpants"/>
+			<menu_item_call label="スカート" name="Skirt"/>
+			<menu_item_call label="すべての服" name="All Clothes"/>
 		</menu>
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="ジェスチャー…" name="Gestures..." />
-		<menu_item_call label="プロフィール..." name="Profile..." />
-		<menu_item_call label="容姿..." name="Appearance..." />
-		<menu_item_separator label="-----------" name="separator7" />
-		<menu_item_check label="フレンド..." name="Friends..." />
-		<menu_item_call label="グループ..." name="Groups..." />
-		<menu_item_separator label="-----------" name="separator8" />
-		<menu_item_call label="環境設定..." name="Preferences..." />
+		<menu_item_separator label="-----------" name="separator6"/>
+		<menu_item_call label="ジェスチャー…" name="Gestures..."/>
+		<menu_item_call label="プロフィール..." name="Profile..."/>
+		<menu_item_call label="容姿..." name="Appearance..."/>
+		<menu_item_separator label="-----------" name="separator7"/>
+		<menu_item_check label="フレンド..." name="Friends..."/>
+		<menu_item_call label="グループ..." name="Groups..."/>
+		<menu_item_separator label="-----------" name="separator8"/>
+		<menu_item_call label="環境設定..." name="Preferences..."/>
 	</menu>
 	<menu label="ビュー" name="View">
-		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~" />
-		<menu_item_call label="マウスルック" name="Mouselook" />
-		<menu_item_check label="建造" name="Build" />
-		<menu_item_check label="ジョイスティック・フライカム" name="Joystick Flycam" />
-		<menu_item_call label="表示をリセット" name="Reset View" />
-		<menu_item_call label="最後のチャットを閲覧" name="Look at Last Chatter" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_check label="ツールバー" name="Toolbar" />
-		<menu_item_check label="ローカル・チャット" name="Chat History" />
-		<menu_item_check label="コミュニケーション" name="Instant Message" />
-		<menu_item_call label="持ち物" name="Inventory" />
-		<menu_item_check label="アクティブ・スピーカー" name="Active Speakers" />
-		<menu_item_check label="ミュートリスト" name="Mute List" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_check label="カメラ・コントロール" name="Camera Controls" />
-		<menu_item_check label="移動コントロール" name="Movement Controls" />
-		<menu_item_check label="世界地図" name="World Map" />
-		<menu_item_check label="ミニマップ" name="Mini-Map" />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_check label="統計バー" name="Statistics Bar" />
-		<menu_item_check label="土地境界線" name="Property Lines" />
-		<menu_item_check label="土地オーナー" name="Land Owners" />
-		<menu_item_separator label="-----------" name="separator4" />
+		<tearoff_menu label="~~~~~~~~~~~" name="~~~~~~~~~~~"/>
+		<menu_item_call label="マウスルック" name="Mouselook"/>
+		<menu_item_check label="建造" name="Build"/>
+		<menu_item_check label="ジョイスティック・フライカム" name="Joystick Flycam"/>
+		<menu_item_call label="表示をリセット" name="Reset View"/>
+		<menu_item_call label="最後のチャットを閲覧" name="Look at Last Chatter"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_check label="ツールバー" name="Toolbar"/>
+		<menu_item_check label="ローカル・チャット" name="Chat History"/>
+		<menu_item_check label="コミュニケーション" name="Instant Message"/>
+		<menu_item_call label="持ち物" name="Inventory"/>
+		<menu_item_check label="アクティブ・スピーカー" name="Active Speakers"/>
+		<menu_item_check label="ミュートリスト" name="Mute List"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_check label="カメラ・コントロール" name="Camera Controls"/>
+		<menu_item_check label="移動コントロール" name="Movement Controls"/>
+		<menu_item_check label="世界地図" name="World Map"/>
+		<menu_item_check label="ミニマップ" name="Mini-Map"/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_check label="統計バー" name="Statistics Bar"/>
+		<menu_item_check label="土地境界線" name="Property Lines"/>
+		<menu_item_check label="土地オーナー" name="Land Owners"/>
+		<menu_item_separator label="-----------" name="separator4"/>
 		<menu label="ホバリング・ヒント" name="Hover Tips">
-			<menu_item_check label="ヒントを表示" name="Show Tips" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_check label="土地のヒント" name="Land Tips" />
-			<menu_item_check label="すべてのオブジェクトに関するヒント"
-			     name="Tips On All Objects" />
-		</menu>
-		<menu_item_check label="Alt キー:オブジェクト表示" name="Alt Shows Physical" />
-		<menu_item_check label="標識を常にオン" name="Beacons Always On" />
-		<menu_item_check label="透明オブジェクトを強調表示" name="Highlight Transparent" />
-		<menu label="ビーコン" name="Beacons">
-			<menu_item_check label="タッチオンリーのスクリプトを含むオブジェクト"
-			     name="Scripted Objects With Touch Only" />
-			<menu_item_check label="スクリプト・オブジェクト" name="Scripted Objects" />
-			<menu_item_check label="物理的オブジェクト" name="Physical Objects" />
-			<menu_item_check label="音源" name="Sound Sources" />
-			<menu_item_check label="パーティクル源" name="Particle Sources" />
-			<menu_item_check label="ハイライトのレンダリング" name="Render Highlights" />
-			<menu_item_check label="標識のレンダリング" name="Render Beacons" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_separator label="-----------" name="separator2" />
-			<menu_item_check label="パーティクルを隠す" name="Hide Particles" />
-			<menu_item_separator label="-----------" name="separator3" />
-			<menu label="標識の幅" name="Beacon Width">
-				<menu_item_call label="1" name="Beacon Width 1" />
-				<menu_item_call label="4" name="Beacon Width 4" />
-				<menu_item_call label="16" name="Beacon Width 16" />
-				<menu_item_call label="32" name="Beacon Width 32" />
-			</menu>
+			<menu_item_check label="ヒントを表示" name="Show Tips"/>
+			<menu_item_separator label="-----------" name="separator"/>
+			<menu_item_check label="土地のヒント" name="Land Tips"/>
+			<menu_item_check label="すべてのオブジェクトに関するヒント" name="Tips On All Objects"/>
 		</menu>
-		<menu_item_check label="HUD添付物を表示" name="Show HUD Attachments" />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="拡大" name="Zoom In" />
-		<menu_item_call label="デフォルトを拡大" name="Zoom Default" />
-		<menu_item_call label="縮小" name="Zoom Out" />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="[全画面表示]" name="Toggle Fullscreen" />
-		<menu_item_call label="UIサイズをデフォルトに設定" name="Set UI Size to Default" />
+		<menu_item_check label="透明オブジェクトを強調表示" name="Highlight Transparent"/>
+		<menu_item_check label="ビーコン(標識)" name="beacons"/>
+		<menu_item_check label="パーティクルを隠す" name="Hide Particles"/>
+		<menu_item_check label="HUD添付物を表示" name="Show HUD Attachments"/>
+		<menu_item_separator label="-----------" name="separator5"/>
+		<menu_item_call label="拡大" name="Zoom In"/>
+		<menu_item_call label="デフォルトを拡大" name="Zoom Default"/>
+		<menu_item_call label="縮小" name="Zoom Out"/>
+		<menu_item_separator label="-----------" name="separator6"/>
+		<menu_item_call label="[全画面表示]" name="Toggle Fullscreen"/>
+		<menu_item_call label="UIサイズをデフォルトに設定" name="Set UI Size to Default"/>
 	</menu>
 	<menu label="世界" name="World">
-		<menu_item_call label="チャット" name="Chat" />
-		<menu_item_call label="ジェスチャーの開始" name="Start Gesture" />
-		<menu_item_check label="常に走る" name="Always Run" />
-		<menu_item_check label="飛行" name="Fly" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_call label="ここにランドマークを作成" name="Create Landmark Here" />
-		<menu_item_call label="ホームをここに設定" name="Set Home to Here" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_call label="ホームにテレポート" name="Teleport Home" />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="退席中に設定" name="Set Away" />
-		<menu_item_call label="ビジーに設定" name="Set Busy" />
-		<menu_item_call label="アニメーションをすべて停止" name="Stop All Animations" />
-		<menu_item_call label="キーを解除" name="Release Keys" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_call label="口座履歴..." name="Account History..." />
-		<menu_item_call label="自分の口座の管理..." name="Manage My Account..." />
-		<menu_item_call label="L$(リンデン・ドル)を購入" name="Buy and Sell L$..." />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="自分の土地..." name="My Land..." />
-		<menu_item_call label="土地情報..." name="About Land..." />
-		<menu_item_call label="土地を購入..." name="Buy Land..." />
-		<menu_item_call label="地域/不動産..." name="Region/Estate..." />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu label="太陽を調整する" name="Force Sun">
-			<menu_item_call label="日の出" name="Sunrise" />
-			<menu_item_call label="正午" name="Noon" />
-			<menu_item_call label="日没" name="Sunset" />
-			<menu_item_call label="深夜" name="Midnight" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_call label="地域デフォルトに戻す" name="Revert to Region Default" />
-		</menu>
+		<menu_item_call label="チャット" name="Chat"/>
+		<menu_item_check label="常に走る" name="Always Run"/>
+		<menu_item_check label="飛行" name="Fly"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_call label="ここにランドマークを作成" name="Create Landmark Here"/>
+		<menu_item_call label="ホームをここに設定" name="Set Home to Here"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_call label="ホームにテレポート" name="Teleport Home"/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="退席中に設定" name="Set Away"/>
+		<menu_item_call label="ビジーに設定" name="Set Busy"/>
+		<menu_item_call label="アニメーションをすべて停止" name="Stop All Animations"/>
+		<menu_item_call label="キーを解除" name="Release Keys"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="口座履歴..." name="Account History..."/>
+		<menu_item_call label="自分の口座の管理..." name="Manage My Account..."/>
+		<menu_item_call label="L$(リンデン・ドル)を購入" name="Buy and Sell L$..."/>
+		<menu_item_separator label="-----------" name="separator5"/>
+		<menu_item_call label="自分の土地..." name="My Land..."/>
+		<menu_item_call label="土地情報..." name="About Land..."/>
+		<menu_item_call label="土地を購入..." name="Buy Land..."/>
+		<menu_item_call label="地域/不動産..." name="Region/Estate..."/>
+		<menu_item_separator label="-----------" name="separator6"/>
 		<menu label="環境設定" name="Environment Settings">
-			<menu_item_call label="日の出" name="Sunrise" />
-			<menu_item_call label="正午" name="Noon" />
-			<menu_item_call label="日没" name="Sunset" />
-			<menu_item_call label="深夜" name="Midnight" />
-			<menu_item_call label="地域デフォルトに戻す" name="Revert to Region Default" />
-			<menu_item_separator label="-----------" name="separator" />
-			<menu_item_call label="環境編集" name="Environment Editor" />
+			<menu_item_call label="日の出" name="Sunrise"/>
+			<menu_item_call label="正午" name="Noon"/>
+			<menu_item_call label="日没" name="Sunset"/>
+			<menu_item_call label="深夜" name="Midnight"/>
+			<menu_item_call label="地域デフォルトに戻す" name="Revert to Region Default"/>
+			<menu_item_separator label="-----------" name="separator"/>
+			<menu_item_call label="環境編集" name="Environment Editor"/>
 		</menu>
 	</menu>
 	<menu label="ツール" name="Tools">
-		<menu_item_check label="リンクされたパートを編集" name="Edit Linked Parts" />
-		<menu_item_separator label="-----------" name="separator7" />
 		<menu label="ツールを選ぶ" name="Select Tool">
-			<menu_item_call label="フォーカス" name="Focus" />
-			<menu_item_call label="移動" name="Move" />
-			<menu_item_call label="編集" name="Edit" />
-			<menu_item_call label="作成" name="Create" />
-			<menu_item_call label="土地" name="Land" />
+			<menu_item_call label="フォーカス" name="Focus"/>
+			<menu_item_call label="移動" name="Move"/>
+			<menu_item_call label="編集" name="Edit"/>
+			<menu_item_call label="作成" name="Create"/>
+			<menu_item_call label="土地" name="Land"/>
+		</menu>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_check label="自分のオブジェクトのみ選択" name="Select Only My Objects"/>
+		<menu_item_check label="移動可能なオブジェクトのみ選択" name="Select Only Movable Objects"/>
+		<menu_item_check label="環境で選択" name="Select By Surrounding"/>
+		<menu_item_check label="非表示の選択を表示" name="Show Hidden Selection"/>
+		<menu_item_check label="ライト半径一覧を表示" name="Show Light Radius for Selection"/>
+		<menu_item_check label="選択ビームを表示" name="Show Selection Beam"/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_check label="グリッドにスナップ" name="Snap to Grid"/>
+		<menu_item_call label="オブジェクトXYをグリッドにスナップ" name="Snap Object XY to Grid"/>
+		<menu_item_call label="グリッド用に[選択]を使用" name="Use Selection for Grid"/>
+		<menu_item_call label="グリッドのオプション..." name="Grid Options..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_check label="リンクされたパートを編集" name="Edit Linked Parts"/>
+		<menu_item_call label="リンク" name="Link"/>
+		<menu_item_call label="リンクしない" name="Unlink"/>
+		<menu_item_separator label="-----------" name="separator4"/>
+		<menu_item_call label="選択をフォーカス" name="Focus on Selection"/>
+		<menu_item_call label="選択範囲にズームイン" name="Zoom to Selection"/>
+		<menu_item_call label="オブジェクトを購入" name="Menu Object Take"/>
+		<menu_item_call label="コピーを取る" name="Take Copy"/>
+		<menu_item_call label="オブジェクトを持ち物に戻して保存" name="Save Object Back to My Inventory"/>
+		<menu_item_call label="オブジェクトをオブジェクト・コンテンツに戻して保存" name="Save Object Back to Object Contents"/>
+		<menu_item_separator label="-----------" name="separator6"/>
+		<menu_item_call label="スクリプト警告/エラー・ウィンドウを表示" name="Show Script Warning/Error Window"/>
+		<menu label="選択したスクリプトを再コンパイル" name="Recompile Scripts in Selection">
+			<menu_item_call label="モノ" name="Mono"/>
+			<menu_item_call label="LSL" name="LSL"/>
 		</menu>
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_check label="自分のオブジェクトのみ選択" name="Select Only My Objects" />
-		<menu_item_check label="移動可能なオブジェクトのみ選択"
-		     name="Select Only Movable Objects" />
-		<menu_item_check label="環境で選択" name="Select By Surrounding" />
-		<menu_item_check label="非表示の選択を表示" name="Show Hidden Selection" />
-		<menu_item_check label="ライト半径一覧を表示" name="Show Light Radius for Selection" />
-		<menu_item_check label="選択ビームを表示" name="Show Selection Beam" />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_check label="グリッドにスナップ" name="Snap to Grid" />
-		<menu_item_call label="オブジェクトXYをグリッドにスナップ"
-		     name="Snap Object XY to Grid" />
-		<menu_item_call label="グリッド用に[選択]を使用" name="Use Selection for Grid" />
-		<menu_item_call label="グリッドのオプション..." name="Grid Options..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="リンク" name="Link" />
-		<menu_item_call label="リンクしない" name="Unlink" />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="選択をフォーカス" name="Focus on Selection" />
-		<menu_item_call label="選択範囲にズームイン" name="Zoom to Selection" />
-		<menu_item_call label="オブジェクトを購入" name="Menu Object Take" />
-		<menu_item_call label="コピーを取る" name="Take Copy" />
-		<menu_item_call label="オブジェクトを持ち物に戻して保存"
-		     name="Save Object Back to My Inventory" />
-		<menu_item_call
-		     label="オブジェクトをオブジェクト・コンテンツに戻して保存"
-		     name="Save Object Back to Object Contents" />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="スクリプト警告/エラー・ウィンドウを表示"
-		     name="Show Script Warning/Error Window" />
-		<menu_item_call label="選択したスクリプトを再コンパイル"
-		     name="Recompile Scripts in Selection">
-			<menu_item_call label="モノ" name="Mono" />
-			<menu_item_call label="LSL" name="LSL" />
-		</menu_item_call>
-		<menu_item_call label="選択したスクリプトをリセット"
-		     name="Reset Scripts in Selection" />
-		<menu_item_call label="選択したスクリプトを起動する"
-		     name="Set Scripts to Running in Selection" />
-		<menu_item_call label="選択したスクリプトを起動しない"
-		     name="Set Scripts to Not Running in Selection" />
+		<menu_item_call label="選択したスクリプトをリセット" name="Reset Scripts in Selection"/>
+		<menu_item_call label="選択したスクリプトを起動する" name="Set Scripts to Running in Selection"/>
+		<menu_item_call label="選択したスクリプトを起動しない" name="Set Scripts to Not Running in Selection"/>
 	</menu>
 	<menu label="ヘルプ" name="Help">
-		<menu_item_call label="Second Life ヘルプ" name="Second Life Help" />
-		<menu_item_call label="インワールド・ヘルプ:" name="In-World Help" />
-		<menu_item_call label="追加ヘルプ" name="Additional Help" />
-		<menu_item_call label="チュートリアル" name="Tutorial" />
-		<menu_item_separator label="-----------" name="separator" />
-		<menu_item_call label="オフィシャルLindenブログ..." name="Official Linden Blog..." />
-		<menu_item_separator label="-----------" name="separator2" />
-		<menu_item_call label="スクリプト・ガイド..." name="Scripting Guide..." />
-		<menu_item_call label="スクリプト・ポータル..." name="Scripting Portal..." />
-		<menu_item_separator label="-----------" name="separator3" />
-		<menu_item_call label="本日のメッセージ..." name="Message of the Day..." />
-		<menu_item_separator label="-----------" name="separator4" />
-		<menu_item_call label="嫌がらせの報告..." name="Report Abuse..." />
-		<menu_item_call label="ぶつかる、押す、および当たる..."
-		     name="Bumps, Pushes &amp;amp; Hits..." />
-		<menu_item_call label="ラグ メーター" name="Lag Meter" />
-		<menu_item_separator label="-----------" name="separator7" />
+		<menu_item_call label="Second Life ヘルプ" name="Second Life Help"/>
+		<menu_item_call label="チュートリアル" name="Tutorial"/>
+		<menu_item_separator label="-----------" name="separator"/>
+		<menu_item_call label="オフィシャルLindenブログ..." name="Official Linden Blog..."/>
+		<menu_item_separator label="-----------" name="separator2"/>
+		<menu_item_call label="スクリプト・ポータル..." name="Scripting Portal..."/>
+		<menu_item_separator label="-----------" name="separator3"/>
+		<menu_item_call label="嫌がらせの報告..." name="Report Abuse..."/>
+		<menu_item_call label="ぶつかる、押す、および当たる..." name="Bumps, Pushes &amp;amp; Hits..."/>
+		<menu_item_call label="ラグ メーター" name="Lag Meter"/>
+		<menu_item_separator label="-----------" name="separator7"/>
 		<menu label="バグの報告" name="Bug Reporting">
-			<menu_item_call label="パブリック問題トラッカー..." name="Public Issue Tracker..." />
-			<menu_item_call label="パブリック問題トラッカー ヘルプ..."
-			     name="Publc Issue Tracker Help..." />
-			<menu_item_call label="バグの報告 101..." name="Bug Reporing 101..." />
-			<menu_item_call label="セキュリティ問題..." name="Security Issues..." />
-			<menu_item_call label="QA Wiki..." name="QA Wiki..." />
-			<menu_item_separator label="-----------" name="separator7" />
-			<menu_item_separator label="-----------" name="separator9" />
-			<menu_item_call label="バグの報告..." name="Report Bug..." />
+			<menu_item_call label="パブリック問題トラッカー..." name="Public Issue Tracker..."/>
+			<menu_item_call label="パブリック問題トラッカー ヘルプ..." name="Publc Issue Tracker Help..."/>
+			<menu_item_separator label="-----------" name="separator7"/>
+			<menu_item_call label="バグの報告 101..." name="Bug Reporing 101..."/>
+			<menu_item_call label="セキュリティ問題..." name="Security Issues..."/>
+			<menu_item_call label="QA Wiki..." name="QA Wiki..."/>
+			<menu_item_separator label="-----------" name="separator9"/>
+			<menu_item_call label="バグの報告..." name="Report Bug..."/>
 		</menu>
-		<menu_item_separator label="-----------" name="separator5" />
-		<menu_item_call label="リリースノート..." name="Release Notes..." />
-		<menu_item_separator label="-----------" name="separator6" />
-		<menu_item_call label="Second Lifeについて" name="About Second Life..." />
+		<menu_item_call label="Second Lifeについて" name="About Second Life..."/>
 	</menu>
 </menu_bar>
diff --git a/indra/newview/skins/default/xui/ja/notify.xml b/indra/newview/skins/default/xui/ja/notify.xml
index f53b6a7..849a1fb 100644
--- a/indra/newview/skins/default/xui/ja/notify.xml
+++ b/indra/newview/skins/default/xui/ja/notify.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <notifications>
 	<notify name="SystemMessageTip">
 		<message name="message">
@@ -379,8 +379,8 @@
 	</notify>
 	<notify name="PushRestricted">
 		<message name="message">
-			この土地は「llPushObjectを制限」です。
-土地所有者でない限り、ここで他人をプッシュすることはできません。
+			この土地では「プッシング禁止」です。 
+土地所有者以外はここで他人をプッシュすることはできません。
 		</message>
 	</notify>
 	<notify name="VoiceAvailablity">
diff --git a/indra/newview/skins/default/xui/ja/panel_chat_bar.xml b/indra/newview/skins/default/xui/ja/panel_chat_bar.xml
index cb1d103..1296f65 100644
--- a/indra/newview/skins/default/xui/ja/panel_chat_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_chat_bar.xml
@@ -1,17 +1,20 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="chat_bar">
 	<panel/>
 	<button label="周辺チャット" name="History" tool_tip="過去の発言を表示するには、ここをクリック"/>
-	<line_editor width="95" label="チャットを開始するには、ここをクリックします。" name="Chat Editor" tool_tip="話すにはEnterを押し、叫ぶにはCtrl+Enterを押します。"/>
-	<flyout_button left_delta="100" label="発言" name="Say" tool_tip="(Enter)">
+	<line_editor label="チャットを開始するには、ここをクリックします。" name="Chat Editor" tool_tip="話すにはEnterを押し、叫ぶにはCtrl+Enterを押します。" width="95"/>
+	<flyout_button label="発言" left_delta="100" name="Say" tool_tip="(Enter)">
+		<flyout_button_item name="shout_item">
+			叫ぶ
+		</flyout_button_item>
 		<flyout_button_item name="say_item">
 			発言
 		</flyout_button_item>
-		<flyout_button_item name="shout_item">
-			叫ぶ
+		<flyout_button_item name="whisper_item">
+			ささやく
 		</flyout_button_item>
 	</flyout_button>
-	<combo_box width="100" label="ジェスチャー" name="Gesture"/>
+	<combo_box label="ジェスチャー" name="Gesture" width="100"/>
 	<string name="gesture_label">
 		ジェスチャー
 	</string>
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
index fd97d5d..a8d6798 100644
--- a/indra/newview/skins/default/xui/ja/panel_login.xml
+++ b/indra/newview/skins/default/xui/ja/panel_login.xml
@@ -40,7 +40,7 @@
 	<text name="channel_text">
 		[CHANNEL] [VERSION]
 	</text>
-	<text name="forgot_password_text">
+	<text name="forgot_password_text" left="-230" width="220">
 		名前またはパスワードをお忘れですか?
 	</text>
 	<text name="forgot_password_url">
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
index dabf9e8..07502ee 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -1,26 +1,14 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="一般" name="general_panel">
-	<combo_box name="location_combobox">
-		<combo_item name="MyHome">
-			自宅(ホーム)
-		</combo_item>
-		<combo_item name="MyLastLocation">
-			最後のロケーション
-		</combo_item>
-	</combo_box>
-	<check_box label="ログイン画面に開始ロケーションを表示"
-	     name="show_location_checkbox" />
-	<radio_group name="fade_out_radio">
-		<radio_item type="string" length="1" name="Never">
-			なし
+	<radio_group name="default_start_location">
+		<radio_item name="MyHome" tool_tip="常に自宅(ホーム)にログイン">
+			自宅(ホーム)
 		</radio_item>
-		<radio_item type="string" length="1" name="Temporarily">
-			一時的に表示
-		</radio_item>
-		<radio_item type="string" length="1" name="Always">
-			いつも
+		<radio_item name="MyLastLocation" tool_tip="常に最後にいたロケーションにログイン">
+			最後のロケーション
 		</radio_item>
 	</radio_group>
+	<check_box label="ログイン画面に開始ロケーションを表示" name="show_location_checkbox"/>
 	<combo_box name="fade_out_combobox">
 		<combo_item name="Never">
 			なし
@@ -32,100 +20,86 @@
 			いつも
 		</combo_item>
 	</combo_box>
-	<check_box label="画面上で自分の名前を隠す" name="show_my_name_checkbox" />
+	<check_box label="小さなアバター名" name="small_avatar_names_checkbox"/>
+	<check_box label="画面上で自分の名前を隠す" name="show_my_name_checkbox"/>
 	<text name="group_titles_textbox">
 		グループ・タイトル:
 	</text>
-	<check_box label="グループ・タイトルをすべて非表示"
-	     name="show_all_title_checkbox" />
-	<check_box label="自分のグループ・タイトルを隠す"
-	     name="show_my_title_checkbox" />
-	<check_box label="小さなアバター名" name="small_avatar_names_checkbox" />
-	<color_swatch label="" name="effect_color_swatch"
-	     tool_tip="カラー・ピッカーをクリックして開く" />
+	<check_box label="グループ・タイトルをすべて非表示" name="show_all_title_checkbox"/>
+	<check_box label="自分のグループ・タイトルを隠す" name="show_my_title_checkbox"/>
+	<color_swatch label="" name="effect_color_swatch" tool_tip="カラー・ピッカーをクリックして開く"/>
 	<text name="UI Size:">
 		UI サイズ:
 	</text>
-	<check_box label="解像度独立スケールを使用" name="ui_auto_scale" />
-	<spinner label="退席までの時間:" name="afk_timeout_spinner" />
-	<check_box label="オンライン・フレンド通知を表示"
-	     name="friends_online_notify_checkbox" />
-	<check_box label="ミニマップを回転" name="rotate_mini_map_checkbox" />
-	<check_box label="リンデン・ドル(L$)の支払い/受け取りを通知"
-	     name="notify_money_change_checkbox" />
-	<check_box label="次回起動時グラフィックカード自動検出"
-	     name="probe_hardware_checkbox"
-	     tool_tip="Second Lifeは、あなたのハードウェアに基づいて、いくつかのグラフィック設定を自動的に構成します。  新しいハードウェアをインストールした場合は、Second Lifeに再度検出させるようにしてください。" />
-	<check_box label="デフォルト・システムのカラー選択を使用"
-	     name="use_system_color_picker_checkbox"
-	     tool_tip="Second Life内蔵でない、デフォルト・システムのカラー選択を使用" />
-	<check_box label="オーバーレイ・バーに検索パネルを表示"
-	     name="show_search_panel"
-	     tool_tip="組み込みの検索パネルを表示します。" />
-	<text type="string" length="1" name="start_location_textbox">
+	<check_box label="解像度独立スケールを使用" name="ui_auto_scale"/>
+	<spinner label="退席までの時間:" name="afk_timeout_spinner"/>
+	<check_box label="ミニマップを回転" name="rotate_mini_map_checkbox"/>
+	<check_box label="リンデン・ドル(L$)の支払い/受け取りを通知" name="notify_money_change_checkbox"/>
+	<check_box label="デフォルト・システムのカラー選択を使用" name="use_system_color_picker_checkbox" tool_tip="Second Life内蔵でない、デフォルト・システムのカラー選択を使用"/>
+	<check_box label="オーバーレイ・バーに検索パネルを表示" name="show_search_panel" tool_tip="組み込みの検索パネルを表示します。"/>
+	<text length="1" name="start_location_textbox" type="string">
 		ログイン位置:
 	</text>
-	<text type="string" length="1" name="show_names_textbox">
+	<text length="1" name="show_names_textbox" type="string">
 		名前を表示:
 	</text>
-	<text type="string" length="1" name="effects_color_textbox">
+	<text length="1" name="effects_color_textbox" type="string">
 		自分の効果の色:
 	</text>
-	<text type="string" length="1" name="seconds_textbox">
+	<text length="1" name="seconds_textbox" type="string">
 		秒
 	</text>
-	<text type="string" length="1" name="crash_report_textbox">
+	<text length="1" name="crash_report_textbox" type="string">
 		クラッシュ報告:
 	</text>
-	<text type="string" length="1" name="language_textbox">
+	<text length="1" name="language_textbox" type="string">
 		言語:
 	</text>
-	<text type="string" length="1" name="language_textbox2">
+	<text length="1" name="language_textbox2" type="string">
 		(再起動にて反映)
 	</text>
-	<text name="region_name_prompt">
+	<string name="region_name_prompt">
 		&lt;地域の名前入力&gt;
-	</text>
+	</string>
 	<combo_box name="crash_behavior_combobox">
-		<combo_item type="string" length="1" name="Askbeforesending">
+		<combo_item length="1" name="Askbeforesending" type="string">
 			送る前に確認する
 		</combo_item>
-		<combo_item type="string" length="1" name="Alwayssend">
+		<combo_item length="1" name="Alwayssend" type="string">
 			常に送信
 		</combo_item>
-		<combo_item type="string" length="1" name="Neversend">
+		<combo_item length="1" name="Neversend" type="string">
 			送信しない
 		</combo_item>
 	</combo_box>
 	<combo_box name="language_combobox">
-		<combo_item type="string" length="1" name="System Default Language">
+		<combo_item length="1" name="System Default Language" type="string">
 			システム・デフォルト
 		</combo_item>
-		<combo_item type="string" length="1" name="English">
+		<combo_item length="1" name="English" type="string">
 			English (英語)
 		</combo_item>
-		<combo_item type="string" length="1" name="Chinese">
+		<combo_item length="1" name="Chinese" type="string">
 			汉语/漢語(中国語) – ベータ
 		</combo_item>
-		<combo_item type="string" length="1" name="Deutsch(German)">
+		<combo_item length="1" name="Deutsch(German)" type="string">
 			Deutsch (ドイツ語) – ベータ
 		</combo_item>
-		<combo_item type="string" length="1" name="French">
+		<combo_item length="1" name="French" type="string">
 			Français (フランス語) – ベータ
 		</combo_item>
-		<combo_item type="string" length="1" name="(Japanese)">
+		<combo_item length="1" name="(Japanese)" type="string">
 			日本語 – ベータ
 		</combo_item>
-		<combo_item type="string" length="1" name="(Korean)">
+		<combo_item length="1" name="(Korean)" type="string">
 			한국어 (韓国語) – ベータ
 		</combo_item>
-		<combo_item type="string" length="1" name="Portugese">
+		<combo_item length="1" name="Portugese" type="string">
 			Português (ポルトガル語) – ベータ
 		</combo_item>
-		<combo_item type="string" length="1" name="Spanish">
+		<combo_item length="1" name="Spanish" type="string">
 			Español (スペイン語) – ベータ
 		</combo_item>
 	</combo_box>
-	<check_box label="言語をオブジェクトと共有" name="language_is_public"
-	     tool_tip="優先言語をインワールドのオブジェクトが認識する" />
+	<check_box label="言語をオブジェクトと共有" name="language_is_public" tool_tip="優先言語をインワールドのオブジェクトが認識する"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_network.xml b/indra/newview/skins/default/xui/ja/panel_preferences_network.xml
index 3e408af..729a1f8 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_network.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_network.xml
@@ -1,20 +1,23 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="ネットワーク" name="network">
-	<text type="string" length="1" name="text_box">
+	<text length="1" name="text_box" type="string">
 		最大帯域幅:
 	</text>
-	<text type="string" length="1" name="text_box2">
+	<text length="1" name="text_box2" type="string">
 		kbps
 	</text>
-	<text type="string" length="1" name="cache_size_label_l">
+	<text length="1" name="cache_size_label_l" type="string">
 		キャッシュ:
 	</text>
-	<button label="クリア" name="clear_cache" />
-	<text type="string" length="1" name="cache_location_label">
+	<text name="text_box5">
+		MB
+	</text>
+	<button label="クリア" name="clear_cache"/>
+	<text length="1" name="cache_location_label" type="string">
 		キャッシュの場所:
 	</text>
-	<button label="設定" label_selected="設定" name="set_cache" />
-	<button label="リセット" label_selected="設定" name="reset_cache" />
-	<check_box label="カスタム・ポート接続" name="connection_port_enabled" />
-	<spinner label="ポート番号:" name="connection_port" />
+	<button label="設定" label_selected="設定" name="set_cache"/>
+	<button label="リセット" label_selected="設定" name="reset_cache"/>
+	<check_box label="カスタム・ポート接続" name="connection_port_enabled"/>
+	<spinner label="ポート番号:" name="connection_port"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml b/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml
index f8adff3..d549d68 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="ボイスチャット" name="chat">
 	<text_editor name="voice_unavailable">
 		ボイスチャットを利用できません
 	</text_editor>
-	<check_box label="ボイスチャットを有効にする" name="enable_voice_check" />
+	<check_box label="ボイスチャットを有効にする" name="enable_voice_check"/>
 	<radio_group name="ear_location">
 		<radio_item name="0">
 			カメラの位置からボイスチャットを聞く。
@@ -18,24 +18,20 @@
 	<text_editor name="voice_chat_description">
 		メモ: 「機器の設定」または「ボイス・チャットの設定」を実行すると、一時的にボイス・チャットから切断されます。
 	</text_editor>
-	<check_box label="プッシュ・トゥ・トークモードでビュアーを起動"
-	     name="push_to_talk_check" />
-	<check_box label="切り替えモードで、プッシュ・トゥ・トークを使用"
-	     name="push_to_talk_toggle_check" />
+	<check_box label="プッシュ・トゥ・トークモードでビュアーを起動" name="push_to_talk_check"/>
+	<check_box label="切り替えモードで、プッシュ・トゥ・トークを使用" name="push_to_talk_toggle_check"/>
 	<text name="push_to_talk_label">
 		プッシュ・トゥ・トークトリガー:
 	</text>
-	<button label="セットキー" name="set_voice_hotkey_button" />
-	<button label="ミドルマウスボタン" name="set_voice_middlemouse_button" />
+	<button label="セットキー" name="set_voice_hotkey_button"/>
+	<button label="ミドルマウスボタン" name="set_voice_middlemouse_button"/>
 	<text name="privacy_heading">
 		プライバシーオプション
 	</text>
-	<check_box
-	     label="自分のフレンドリストにある人からのみ、ボイスコールを受け付ける"
-	     name="voice_call_friends_only_check" />
+	<check_box label="自分のフレンドリストにある人からのみ、ボイスコールを受け付ける" name="voice_call_friends_only_check"/>
 	<text_editor name="device_settings_text">
-		注意:「機器の設定」を実行すると、一時的にボイス・チャットから切断されます。
+		注意:「機器の設定」を実行すると、一時的にボイス・チャットから切断されます。変更は即座に適用されます。
 	</text_editor>
-	<button label="機器の設定" name="device_settings_btn" />
-	<button label="ボイス・チャットの設定" name="launch_voice_wizard_button" />
+	<button label="機器の設定" name="device_settings_btn"/>
+	<button label="ボイス・チャットの設定" name="launch_voice_wizard_button"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_debug.xml b/indra/newview/skins/default/xui/ja/panel_region_debug.xml
index 5a3a334..0cd66a4 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_debug.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="デバッグ" name="Debug">
 	<text name="region_text_lbl">
 		地域:
@@ -6,44 +6,35 @@
 	<text name="region_text">
 		未知
 	</text>
-	<check_box label="スクリプト無効化" name="disable_scripts_check"
-	     tool_tip="この地域のスクリプトをすべて無効化" />
-	<button label="?" name="disable_scripts_help" />
-	<check_box label="衝突を無効化" name="disable_collisions_check"
-	     tool_tip="この地域の非アバター衝突を無効化" />
-	<button label="?" name="disable_collisions_help" />
-	<check_box label="物理作用を無効化" name="disable_physics_check"
-	     tool_tip="この地域の物理作用をすべて無効化" />
-	<button label="?" name="disable_physics_help" />
-	<button label="適用" name="apply_btn" />
+	<check_box label="スクリプト無効化" name="disable_scripts_check" tool_tip="この地域のスクリプトをすべて無効化"/>
+	<button label="?" name="disable_scripts_help"/>
+	<check_box label="衝突を無効化" name="disable_collisions_check" tool_tip="この地域の非アバター衝突を無効化"/>
+	<button label="?" name="disable_collisions_help"/>
+	<check_box label="物理作用を無効化" name="disable_physics_check" tool_tip="この地域の物理作用をすべて無効化"/>
+	<button label="?" name="disable_physics_help"/>
+	<button label="適用" name="apply_btn"/>
+	<text name="objret_text_lbl">
+		オブジェクトの返却
+	</text>
+	<text name="resident_text_lbl">
+		住人:
+	</text>
 	<line_editor name="target_avatar_name">
 		(なし)
 	</line_editor>
-	<button label="選択..." name="choose_avatar_btn" />
-	<button
-	     label="人の土地のアバター・スクリプト・オブジェクトを返却"
-	     name="return_scripted_other_land_btn" />
-	<button label="アバターのスクリプト・オブジェクトをすべて返却"
-	     name="return_scripted_all_btn" />
-	<check_box label="スクリプトのあるオブジェクトのみを返却"
-	     name="return_scripts"
-	     tool_tip="スクリプトがあるオブジェクトのみを返却" />
-	<check_box label="他人の土地にあるオブジェクトのみを返却"
-	     name="return_other_land"
-	     tool_tip="他人に属する土地にあるオブジェクトのみを返却" />
-	<check_box label="この不動産の各地域のオブジェクトを返却"
-	     name="return_estate_wide"
-	     tool_tip="この不動産に含まれているすべての地域のオブジェクトを返却" />
-	<button label="返却" name="return_btn" />
-	<button label="上部コライダー取得" name="top_colliders_btn"
-	     tool_tip="衝突する可能性が最も高いオブジェクトのリスト" />
-	<button label="?" name="top_colliders_help" />
-	<button label="上部スクリプト取得" name="top_scripts_btn"
-	     tool_tip="スクリプトの実行に最も時間を費やしているオブジェクトのリスト" />
-	<button label="?" name="top_scripts_help" />
-	<button label="地域再起動" name="restart_btn"
-	     tool_tip="2分間のカウントダウン後、地域を再起動" />
-	<button label="?" name="restart_help" />
-	<button label="再起動を遅延" name="cancel_restart_btn"
-	     tool_tip="地域の再起動を1時間遅延する" />
+	<button label="選択..." name="choose_avatar_btn"/>
+	<text name="options_text_lbl">
+		オプション:
+	</text>
+	<check_box label="スクリプトのあるオブジェクトのみを返却" name="return_scripts" tool_tip="スクリプトがあるオブジェクトのみを返却"/>
+	<check_box label="他人の土地にあるオブジェクトのみを返却" name="return_other_land" tool_tip="他人に属する土地にあるオブジェクトのみを返却"/>
+	<check_box label="この不動産の各地域のオブジェクトを返却" name="return_estate_wide" tool_tip="この不動産に含まれているすべての地域のオブジェクトを返却"/>
+	<button label="返却" name="return_btn"/>
+	<button label="上部コライダー取得" name="top_colliders_btn" tool_tip="衝突する可能性が最も高いオブジェクトのリスト"/>
+	<button label="?" name="top_colliders_help"/>
+	<button label="上部スクリプト取得" name="top_scripts_btn" tool_tip="スクリプトの実行に最も時間を費やしているオブジェクトのリスト"/>
+	<button label="?" name="top_scripts_help"/>
+	<button label="地域再起動" name="restart_btn" tool_tip="2分間のカウントダウン後、地域を再起動"/>
+	<button label="?" name="restart_help"/>
+	<button label="再起動を遅延" name="cancel_restart_btn" tool_tip="地域の再起動を1時間遅延する"/>
 </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 bfbb2c1..3e2f224 100644
--- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
@@ -1,14 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="status">
-	<text type="string" length="1" name="ParcelNameText"
-	     tool_tip="あなたが立っている土地区画の名前。 「土地情報」をクリックしてください。">
+	<text length="1" name="ParcelNameText" tool_tip="あなたが立っている土地区画の名前。 「土地情報」をクリックしてください。" type="string">
 		区画名はここです
 	</text>
-	<text type="string" length="1" name="BalanceText" tool_tip="口座残高">
+	<text length="1" name="BalanceText" tool_tip="口座残高" type="string">
 		ローディング...
 	</text>
-	<button label="" label_selected="" name="buycurrency" tool_tip="貨幣の購入" />
-	<text type="string" length="12" name="TimeText" tool_tip="現在時刻(太平洋時)">
+	<button label="" label_selected="" name="buycurrency" tool_tip="貨幣の購入"/>
+	<text length="12" name="TimeText" tool_tip="現在時刻(太平洋時)" type="string">
 		12:00 AM
 	</text>
 	<text name="StatBarDaysOfWeek">
@@ -17,29 +16,27 @@
 	<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 type="string" length="1" name="HealthText" tool_tip="健康状態">
+	<button label="" label_selected="" name="scriptout" tool_tip="スクリプト警告およびエラー"/>
+	<button label="" label_selected="" name="health" tool_tip="健康状態"/>
+	<text length="1" name="HealthText" tool_tip="健康状態" type="string">
 		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="llPushObject制限" />
-	<button name="status_voice" tool_tip="ボイス有効" />
-	<button name="status_no_voice"
-	     tool_tip="ここではボイスを使用できません。" />
-	<button label="" label_selected="" name="buyland" tool_tip="この区画を購入" />
+	<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を検索" />
+	<line_editor label="検索" name="search_editor" tool_tip="Second Lifeを検索"/>
+	<button name="search_btn" tool_tip="Second Lifeを検索"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ko/alerts.xml b/indra/newview/skins/default/xui/ko/alerts.xml
index 2f64bc2..938b6d2 100644
--- a/indra/newview/skins/default/xui/ko/alerts.xml
+++ b/indra/newview/skins/default/xui/ko/alerts.xml
@@ -2099,6 +2099,9 @@ www.secondlife.com으로 돌아가 신규 계정을 만드시겠습니까?
 
 [NAME]에게 친구 추가를 요청하시겠습니까?
 		</message>
+		<editline name="editline">
+			저와 친구가 되시겠습니까?
+		</editline>
 		<option name="Offer">
 			제공
 		</option>

-- 
A client for connecting to 3D metaverses such as Linden Labs Secondlife(tm) and OpenSim grids



More information about the Pkg-games-commits mailing list