From 6b81b8629e67d82a7620e48781ded73b6e6126ea Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Sun, 5 May 2013 17:45:35 -0700
Subject: Spring cleaning: removed unused .cpp and.h files, and cleaned up
 header dependencies

---
 indra/llcommon/CMakeLists.txt              |   26 +-
 indra/llcommon/doublelinkedlist.h          | 1397 ----------------------------
 indra/llcommon/llassoclist.h               |  296 ------
 indra/llcommon/lldarrayptr.h               |   36 -
 indra/llcommon/lldeleteutils.h             |   47 -
 indra/llcommon/lldepthstack.h              |   34 +-
 indra/llcommon/lldlinked.h                 |   93 --
 indra/llcommon/lldqueueptr.h               |  352 -------
 indra/llcommon/llenum.h                    |   78 --
 indra/llcommon/llindexedqueue.h            |  155 ---
 indra/llcommon/lllazy.cpp                  |   40 -
 indra/llcommon/lllazy.h                    |  399 --------
 indra/llcommon/lllocalidhashmap.h          |  895 ------------------
 indra/llcommon/llregistry.h                |   12 +-
 indra/llcommon/llsortedvector.h            |  152 ---
 indra/llcommon/llstack.h                   |   48 -
 indra/llcommon/llthread.h                  |    8 +-
 indra/llcommon/lltypeinfolookup.h          |  117 ---
 indra/llcommon/metaclass.cpp               |   81 --
 indra/llcommon/metaclass.h                 |   82 --
 indra/llcommon/metaclasst.h                |   60 --
 indra/llcommon/metaproperty.cpp            |   56 --
 indra/llcommon/metaproperty.h              |   73 --
 indra/llcommon/metapropertyt.h             |  183 ----
 indra/llcommon/reflective.cpp              |   40 -
 indra/llcommon/reflective.h                |   42 -
 indra/llcommon/reflectivet.h               |   48 -
 indra/llcommon/tests/reflection_test.cpp   |  220 -----
 indra/llinventory/llpermissions.cpp        |   16 -
 indra/llinventory/llpermissions.h          |    6 +-
 indra/llmessage/message.h                  |   35 +-
 indra/llmessage/net.cpp                    |    2 +-
 indra/llrender/llfontregistry.cpp          |   24 +-
 indra/llrender/llfontregistry.h            |    5 +-
 indra/llui/llnotifications.h               |    5 +-
 indra/llui/llui.h                          |    4 +-
 indra/llui/lluiimage.h                     |    2 -
 indra/llui/llxuiparser.cpp                 |    2 +
 indra/llui/llxuiparser.h                   |   12 +-
 indra/newview/llagent.cpp                  |   50 +-
 indra/newview/llagent.h                    |    1 +
 indra/newview/llagentwearables.cpp         |    1 +
 indra/newview/llavatariconctrl.cpp         |    1 +
 indra/newview/llcallingcard.cpp            |   20 +-
 indra/newview/lldrawable.cpp               |    2 +-
 indra/newview/lldrawable.h                 |    2 +-
 indra/newview/lldrawpoolavatar.cpp         |    4 +-
 indra/newview/llface.h                     |    6 +-
 indra/newview/llfloateravatartextures.cpp  |    1 +
 indra/newview/llgroupiconctrl.cpp          |   12 +-
 indra/newview/llgroupmgr.cpp               |    2 +
 indra/newview/llhudicon.h                  |    3 -
 indra/newview/llhudmanager.h               |    8 +-
 indra/newview/llimfloater.cpp              |    2 +
 indra/newview/llimview.cpp                 |    1 +
 indra/newview/llimview.h                   |    3 +-
 indra/newview/llinspectavatar.cpp          |    2 +
 indra/newview/llinventorybridge.cpp        |    1 +
 indra/newview/llinventoryicon.cpp          |    3 +
 indra/newview/llinventoryicon.h            |    5 +-
 indra/newview/llinventorymodel.h           |    4 +-
 indra/newview/lllocalbitmaps.cpp           |    1 +
 indra/newview/lllocalbitmaps.h             |    2 +
 indra/newview/llpanelclassified.cpp        |    1 +
 indra/newview/llpaneleditwearable.cpp      |    1 +
 indra/newview/llpanelpeople.h              |    1 +
 indra/newview/llpanelprofile.cpp           |    1 +
 indra/newview/llpanelvoiceeffect.cpp       |    1 +
 indra/newview/llspeakers.cpp               |    2 +
 indra/newview/lltexlayer.cpp               |    1 +
 indra/newview/lltoolpie.cpp                |    1 +
 indra/newview/lltoolselect.cpp             |    1 +
 indra/newview/llviewerassetstats.h         |    1 +
 indra/newview/llvieweraudio.cpp            |    1 +
 indra/newview/llviewerjointmesh.cpp        |    1 -
 indra/newview/llviewerjointmesh.h          |    8 -
 indra/newview/llviewerobject.cpp           |    1 +
 indra/newview/llviewerobject.h             |   27 +-
 indra/newview/llviewerobjectlist.cpp       |    8 +
 indra/newview/llviewerobjectlist.h         |   10 +-
 indra/newview/llvieweroctree.cpp           |    1 +
 indra/newview/llvieweroctree.h             |    3 -
 indra/newview/llviewerpartsim.h            |    2 -
 indra/newview/llviewerprecompiledheaders.h |    6 -
 indra/newview/llviewerregion.cpp           |   56 +-
 indra/newview/llviewerregion.h             |    1 +
 indra/newview/llviewerwindow.cpp           |    1 +
 indra/newview/llvoavatar.cpp               |  122 +--
 indra/newview/llvoavatar.h                 |    5 +-
 indra/newview/llvoavatarself.cpp           |    1 +
 indra/newview/llvocache.cpp                |   56 +-
 indra/newview/llvocache.h                  |   20 +-
 indra/newview/llvoicechannel.cpp           |    2 +
 indra/newview/llvoiceclient.h              |    1 -
 indra/newview/llvoinventorylistener.h      |    4 +-
 indra/newview/llvosurfacepatch.h           |    2 +
 indra/newview/llvovolume.cpp               |    2 +-
 indra/newview/llwearable.h                 |    2 +-
 indra/newview/llworld.cpp                  |    5 +-
 indra/newview/pipeline.h                   |   14 -
 100 files changed, 307 insertions(+), 5386 deletions(-)
 delete mode 100644 indra/llcommon/doublelinkedlist.h
 delete mode 100644 indra/llcommon/llassoclist.h
 delete mode 100644 indra/llcommon/lldarrayptr.h
 delete mode 100644 indra/llcommon/lldeleteutils.h
 delete mode 100644 indra/llcommon/lldlinked.h
 delete mode 100644 indra/llcommon/lldqueueptr.h
 delete mode 100644 indra/llcommon/llenum.h
 delete mode 100644 indra/llcommon/llindexedqueue.h
 delete mode 100644 indra/llcommon/lllazy.cpp
 delete mode 100644 indra/llcommon/lllazy.h
 delete mode 100644 indra/llcommon/lllocalidhashmap.h
 delete mode 100644 indra/llcommon/llsortedvector.h
 delete mode 100644 indra/llcommon/llstack.h
 delete mode 100644 indra/llcommon/lltypeinfolookup.h
 delete mode 100644 indra/llcommon/metaclass.cpp
 delete mode 100644 indra/llcommon/metaclass.h
 delete mode 100644 indra/llcommon/metaclasst.h
 delete mode 100644 indra/llcommon/metaproperty.cpp
 delete mode 100644 indra/llcommon/metaproperty.h
 delete mode 100644 indra/llcommon/metapropertyt.h
 delete mode 100644 indra/llcommon/reflective.cpp
 delete mode 100644 indra/llcommon/reflective.h
 delete mode 100644 indra/llcommon/reflectivet.h
 delete mode 100644 indra/llcommon/tests/reflection_test.cpp

(limited to 'indra')

diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 5117224ddb..23a5dc24c0 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -98,7 +98,7 @@ set(llcommon_SOURCE_FILES
     llstringtable.cpp
     llsys.cpp
     llthread.cpp
-	llthreadlocalstorage.cpp
+    llthreadlocalstorage.cpp
     llthreadsafequeue.cpp
     lltimer.cpp
     lltrace.cpp
@@ -107,9 +107,6 @@ set(llcommon_SOURCE_FILES
     lluri.cpp
     lluuid.cpp
     llworkerthread.cpp
-    metaclass.cpp
-    metaproperty.cpp
-    reflective.cpp
     timing.cpp
     u64.cpp
     )
@@ -119,7 +116,6 @@ set(llcommon_HEADER_FILES
 
     bitpack.h
     ctype_workaround.h
-    doublelinkedlist.h
     fix_macros.h
     imageids.h
     indra_constants.h
@@ -133,7 +129,6 @@ set(llcommon_HEADER_FILES
     llapp.h
     llapr.h
     llassettype.h
-    llassoclist.h
     llavatarconstants.h
     llbase32.h
     llbase64.h
@@ -147,18 +142,13 @@ set(llcommon_HEADER_FILES
     llcriticaldamp.h
     llcursortypes.h
     lldarray.h
-    lldarrayptr.h
     lldate.h
     lldefs.h
     lldependencies.h
-    lldeleteutils.h
     lldepthstack.h
     lldictionary.h
-    lldlinked.h
     lldoubledispatch.h
-    lldqueueptr.h
     llendianswizzle.h
-    llenum.h
     llerror.h
     llerrorcontrol.h
     llerrorlegacy.h
@@ -182,18 +172,15 @@ set(llcommon_HEADER_FILES
     llhash.h
     llheartbeat.h
     llhttpstatuscodes.h
-    llindexedqueue.h
     llinitparam.h
     llinstancetracker.h
     llkeythrottle.h
-    lllazy.h
     llleap.h
     llleaplistener.h
     lllistenerwrapper.h
     lllinkedqueue.h
     llliveappconfig.h
     lllivefile.h
-    lllocalidhashmap.h
     lllog.h
     lllslconstants.h
     llmap.h
@@ -228,8 +215,6 @@ set(llcommon_HEADER_FILES
     llsecondlifeurls.h
     llsimplehash.h
     llsingleton.h
-    llsortedvector.h
-    llstack.h
     llstacktrace.h
     llstatenums.h
     llstl.h
@@ -247,7 +232,6 @@ set(llcommon_HEADER_FILES
     lltracerecording.h
     lltracethreadrecorder.h
     lltreeiterators.h
-    lltypeinfolookup.h
     llunit.h
     lluri.h
     lluuid.h
@@ -257,12 +241,6 @@ set(llcommon_HEADER_FILES
     llwin32headerslean.h
     llworkerthread.h
     ll_template_cast.h
-    metaclass.h
-    metaclasst.h
-    metaproperty.h
-    metapropertyt.h
-    reflective.h
-    reflectivet.h
     roles_constants.h
     stdenums.h
     stdtypes.h
@@ -334,7 +312,6 @@ if (LL_TESTS)
   LL_ADD_INTEGRATION_TEST(llerror "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llframetimer "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llinstancetracker "" "${test_libs}")
-  LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}")
@@ -343,7 +320,6 @@ if (LL_TESTS)
   LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}")
-  LL_ADD_INTEGRATION_TEST(reflection "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}")
diff --git a/indra/llcommon/doublelinkedlist.h b/indra/llcommon/doublelinkedlist.h
deleted file mode 100644
index 0aeaa69df3..0000000000
--- a/indra/llcommon/doublelinkedlist.h
+++ /dev/null
@@ -1,1397 +0,0 @@
-/** 
- * @file doublelinkedlist.h
- * @brief Provides a standard doubly linked list for fun and profit.
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_DOUBLELINKEDLIST_H
-#define LL_DOUBLELINKEDLIST_H
-
-#include "llerror.h"
-#include "llrand.h"
-
-// node that actually contains the data
-template <class DATA_TYPE> class LLDoubleLinkedNode
-{
-public:
-	DATA_TYPE			*mDatap;
-	LLDoubleLinkedNode	*mNextp;
-	LLDoubleLinkedNode	*mPrevp;
-
-
-public:
-	// assign the mDatap pointer
-	LLDoubleLinkedNode(DATA_TYPE *data);
-
-	// destructor does not, by default, destroy associated data
-	// however, the mDatap must be NULL to ensure that we aren't causing memory leaks
-	~LLDoubleLinkedNode();
-
-	// delete associated data and NULL out pointer
-	void deleteData();
-
-	// remove associated data and NULL out pointer
-	void removeData();
-};
-
-
-const U32 LLDOUBLE_LINKED_LIST_STATE_STACK_DEPTH = 4;
-
-template <class DATA_TYPE> class LLDoubleLinkedList
-{
-private:
-	LLDoubleLinkedNode<DATA_TYPE> mHead;		// head node
-	LLDoubleLinkedNode<DATA_TYPE> mTail;		// tail node
-	LLDoubleLinkedNode<DATA_TYPE> *mQueuep;		// The node in the batter's box
-	LLDoubleLinkedNode<DATA_TYPE> *mCurrentp;	// The node we're talking about
-
-	// The state stack allows nested exploration of the LLDoubleLinkedList
-	// but should be used with great care
-	LLDoubleLinkedNode<DATA_TYPE> *mQueuepStack[LLDOUBLE_LINKED_LIST_STATE_STACK_DEPTH];
-	LLDoubleLinkedNode<DATA_TYPE> *mCurrentpStack[LLDOUBLE_LINKED_LIST_STATE_STACK_DEPTH];
-	U32 mStateStackDepth;
-	U32	mCount;
-
-	// mInsertBefore is a pointer to a user-set function that returns 
-	// TRUE if "first" should be located before "second"
-	// NOTE: mInsertBefore() should never return TRUE when ("first" == "second")
-	// or never-ending loops can occur
-	BOOL				(*mInsertBefore)(DATA_TYPE *first, DATA_TYPE *second);	
-																				
-public:
-	LLDoubleLinkedList();
-
-	// destructor destroys list and nodes, but not data in nodes
-	~LLDoubleLinkedList();
-
-	// put data into a node and stick it at the front of the list
-	// set mCurrentp to mQueuep
-	void addData(DATA_TYPE *data);
-
-	// put data into a node and stick it at the end of the list
-	// set mCurrentp to mQueuep
-	void addDataAtEnd(DATA_TYPE *data);
-
-	S32 getLength() const;
-	// search the list starting at mHead.mNextp and remove the link with mDatap == data
-	// set mCurrentp to mQueuep
-	// return TRUE if found, FALSE if not found
-	BOOL removeData(const DATA_TYPE *data);
-
-	// search the list starting at mHead.mNextp and delete the link with mDatap == data
-	// set mCurrentp to mQueuep
-	// return TRUE if found, FALSE if not found
-	BOOL deleteData(DATA_TYPE *data);
-
-	// remove all nodes from the list and delete the associated data
-	void deleteAllData();
-
-	// remove all nodes from the list but do not delete data
-	void removeAllNodes();
-
-	BOOL isEmpty();
-
-	// check to see if data is in list
-	// set mCurrentp and mQueuep to the target of search if found, otherwise set mCurrentp to mQueuep
-	// return TRUE if found, FALSE if not found
-	BOOL	checkData(const DATA_TYPE *data);
-
-	// NOTE: This next two funtions are only included here 
-	// for those too familiar with the LLLinkedList template class.
-	// They are depreciated.  resetList() is unecessary while 
-	// getCurrentData() is identical to getNextData() and has
-	// a misleading name.
-	//
-	// The recommended way to loop through a list is as follows:
-	//
-	// datap = list.getFirstData();
-	// while (datap)
-	// {
-	//     /* do stuff */
-	//     datap = list.getNextData();
-	// }
-
-		// place mQueuep on mHead node
-		void resetList();
-	
-		// return the data currently pointed to, 
-		// set mCurrentp to that node and bump mQueuep down the list
-		// NOTE: this function is identical to getNextData()
-		DATA_TYPE *getCurrentData();
-
-
-	// reset the list and return the data currently pointed to, 
-	// set mCurrentp to that node and bump mQueuep down the list
-	DATA_TYPE *getFirstData();
-
-
-	// reset the list and return the data at position n, set mCurentp 
-	// to that node and bump mQueuep down the list
-	// Note: n=0 will behave like getFirstData()
-	DATA_TYPE *getNthData(U32 n);
-
-	// reset the list and return the last data in it, 
-	// set mCurrentp to that node and bump mQueuep up the list
-	DATA_TYPE *getLastData();
-
-	// return data in mQueuep,
-	// set mCurrentp mQueuep and bump mQueuep down the list
-	DATA_TYPE *getNextData();
-
-	// return the data in mQueuep, 
-	// set mCurrentp to mQueuep and bump mQueuep up the list
-	DATA_TYPE *getPreviousData();
-
-	// remove the Node at mCurrentp
-	// set mCurrentp to mQueuep
-	void removeCurrentData();
-
-	// delete the Node at mCurrentp
-	// set mCurrentp to mQueuep
-	void deleteCurrentData();
-
-	// remove the Node at mCurrentp and insert it into newlist
-	// set mCurrentp to mQueuep
-	void moveCurrentData(LLDoubleLinkedList<DATA_TYPE> *newlist);
-
-	// insert the node in front of mCurrentp
-	// set mCurrentp to mQueuep
-	void insertNode(LLDoubleLinkedNode<DATA_TYPE> *node);
-
-	// insert the data in front of mCurrentp
-	// set mCurrentp to mQueuep
-	void insertData(DATA_TYPE *data);
-
-	// if mCurrentp has a previous node then :
-	//   * swaps mCurrentp with its previous
-	//   * set mCurrentp to mQueuep
-	//     (convenient for forward bubble-sort)
-	// otherwise does nothing
-	void swapCurrentWithPrevious();
-
-	// if mCurrentp has a next node then :
-	//   * swaps mCurrentp with its next
-	//   * set mCurrentp to mQueuep
-	//     (convenient for backwards bubble-sort)
-	// otherwise does nothing
-	void swapCurrentWithNext();
-
-	// move mCurrentp to the front of the list
-	// set mCurrentp to mQueuep
-	void moveCurrentToFront();
-	
-	// move mCurrentp to the end of the list
-	// set mCurrentp to mQueuep
-	void moveCurrentToEnd();
-
-	// set mInsertBefore
-	void setInsertBefore(BOOL (*insert_before)(DATA_TYPE *first, DATA_TYPE *second));
-
-	// add data in front of first node for which mInsertBefore(datap, node->mDatap) returns TRUE
-	// set mCurrentp to mQueuep
-	BOOL addDataSorted(DATA_TYPE *datap);
-
-	// sort the list using bubble-sort
-	// Yes, this is a different name than the same function in LLLinkedList.
-	// When it comes time for a name consolidation hopefully this one will win.
-	BOOL bubbleSort();
-
-	// does a single bubble sort pass on the list
-	BOOL lazyBubbleSort();
-
-	// returns TRUE if state successfully pushed (state stack not full)
-	BOOL pushState();
-
-	// returns TRUE if state successfully popped (state stack not empty)
-	BOOL popState();
-
-	// empties the state stack
-	void clearStateStack();
-
-	// randomly move the the links in the list for debug or (Discordian) purposes
-	// sets mCurrentp and mQueuep to top of list
-	void scramble();
-
-private:
-	// add node to beginning of list
-	// set mCurrentp to mQueuep
-	void addNode(LLDoubleLinkedNode<DATA_TYPE> *node);
-
-	// add node to end of list
-	// set mCurrentp to mQueuep
-	void addNodeAtEnd(LLDoubleLinkedNode<DATA_TYPE> *node);
-};
-
-//#endif
-
-////////////////////////////////////////////////////////////////////////////////////////////
-
-// doublelinkedlist.cpp
-// LLDoubleLinkedList template class implementation file.
-// Provides a standard doubly linked list for fun and profit.
-// 
-// Copyright 2001, Linden Research, Inc.
-
-//#include "llerror.h"
-//#include "doublelinkedlist.h"
-
-//////////////////////////////////////////////////////////////////////////////////////////
-// LLDoubleLinkedNode
-//////////////////////////////////////////////////////////////////////////////////////////
-
-
-// assign the mDatap pointer
-template <class DATA_TYPE>
-LLDoubleLinkedNode<DATA_TYPE>::LLDoubleLinkedNode(DATA_TYPE *data) : 
-	mDatap(data), mNextp(NULL), mPrevp(NULL)
-{
-}
-
-
-// destructor does not, by default, destroy associated data
-// however, the mDatap must be NULL to ensure that we aren't causing memory leaks
-template <class DATA_TYPE>
-LLDoubleLinkedNode<DATA_TYPE>::~LLDoubleLinkedNode()
-{
-	if (mDatap)
-	{
-		llerror("Attempting to call LLDoubleLinkedNode destructor with a non-null mDatap!", 1);
-	}
-}
-
-
-// delete associated data and NULL out pointer
-template <class DATA_TYPE>
-void LLDoubleLinkedNode<DATA_TYPE>::deleteData()
-{
-	delete mDatap;
-	mDatap = NULL;
-}
-
-
-template <class DATA_TYPE>
-void LLDoubleLinkedNode<DATA_TYPE>::removeData()
-{
-	mDatap = NULL;
-}
-
-
-//////////////////////////////////////////////////////////////////////////////////////
-// LLDoubleLinkedList
-//////////////////////////////////////////////////////////////////////////////////////
-
-//                                   <------- up -------
-//
-//                                               mCurrentp
-//                                   mQueuep         |
-//                                      |            |
-//                                      |            | 
-//                      .------.     .------.     .------.      .------.
-//                      |      |---->|      |---->|      |----->|      |-----> NULL
-//           NULL <-----|      |<----|      |<----|      |<-----|      |
-//                     _'------'     '------'     '------'      '------:_
-//             .------. /|               |             |               |\ .------.
-//  NULL <-----|mHead |/                 |         mQueuep               \|mTail |-----> NULL
-//             |      |               mCurrentp                           |      |
-//             '------'                                                   '------'
-//                               -------- down --------->
-
-template <class DATA_TYPE>
-LLDoubleLinkedList<DATA_TYPE>::LLDoubleLinkedList()
-: mHead(NULL), mTail(NULL), mQueuep(NULL)
-{
-	mCurrentp = mHead.mNextp;
-	mQueuep = mHead.mNextp;
-	mStateStackDepth = 0;
-	mCount = 0;
-	mInsertBefore = NULL;
-}
-
-
-// destructor destroys list and nodes, but not data in nodes
-template <class DATA_TYPE>
-LLDoubleLinkedList<DATA_TYPE>::~LLDoubleLinkedList()
-{
-	removeAllNodes();
-}
-
-
-// put data into a node and stick it at the front of the list
-// doesn't change mCurrentp nor mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::addData(DATA_TYPE *data)
-{
-	// don't allow NULL to be passed to addData
-	if (!data)
-	{
-		llerror("NULL pointer passed to LLDoubleLinkedList::addData()", 0);
-	}
-
-	// make the new node
-	LLDoubleLinkedNode<DATA_TYPE> *temp = new LLDoubleLinkedNode<DATA_TYPE> (data);
-
-	// add the node to the front of the list
-	temp->mPrevp = NULL; 
-	temp->mNextp = mHead.mNextp;
-	mHead.mNextp = temp;
-
-	// if there's something in the list, fix its back pointer
-	if (temp->mNextp)
-	{
-		temp->mNextp->mPrevp = temp;
-	}
-	// otherwise, fix the tail of the list
-	else 
-	{
-		mTail.mPrevp = temp;
-	}
-
-	mCount++;
-}
-
-
-// put data into a node and stick it at the end of the list
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::addDataAtEnd(DATA_TYPE *data)
-{
-	// don't allow NULL to be passed to addData
-	if (!data)
-	{
-		llerror("NULL pointer passed to LLDoubleLinkedList::addData()", 0);
-	}
-
-	// make the new node
-	LLDoubleLinkedNode<DATA_TYPE> *nodep = new LLDoubleLinkedNode<DATA_TYPE>(data);
-
-	addNodeAtEnd(nodep);
-	mCount++;
-}
-
-
-// search the list starting at mHead.mNextp and remove the link with mDatap == data
-// set mCurrentp to mQueuep, or NULL if mQueuep points to node with mDatap == data
-// return TRUE if found, FALSE if not found
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::removeData(const DATA_TYPE *data)
-{
-	BOOL b_found = FALSE;
-	// don't allow NULL to be passed to addData
-	if (!data)
-	{
-		llerror("NULL pointer passed to LLDoubleLinkedList::removeData()", 0);
-	}
-
-	mCurrentp = mHead.mNextp;
-
-	while (mCurrentp)
-	{
-		if (mCurrentp->mDatap == data)
-		{
-			b_found = TRUE;
-
-			// if there is a next one, fix it
-			if (mCurrentp->mNextp)
-			{
-				mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-			}
-			else // we are at end of list
-			{
-				mTail.mPrevp = mCurrentp->mPrevp;
-			}
-
-			// if there is a previous one, fix it
-			if (mCurrentp->mPrevp)
-			{
-				mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-			}
-			else // we are at beginning of list
-			{
-				mHead.mNextp = mCurrentp->mNextp;
-			}
-
-			// remove the node
-			mCurrentp->removeData();
-			delete mCurrentp;
-			mCount--;
-			break;
-		}
-		mCurrentp = mCurrentp->mNextp; 
-	}
-
-	// reset the list back to where it was
-	if (mCurrentp == mQueuep)
-	{
-		mCurrentp = mQueuep = NULL;
-	}
-	else
-	{
-		mCurrentp = mQueuep;
-	}
-
-	return b_found;
-}
-
-
-// search the list starting at mHead.mNextp and delete the link with mDatap == data
-// set mCurrentp to mQueuep, or NULL if mQueuep points to node with mDatap == data
-// return TRUE if found, FALSE if not found
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::deleteData(DATA_TYPE *data)
-{
-	BOOL b_found = FALSE;
-	// don't allow NULL to be passed to addData
-	if (!data)
-	{
-		llerror("NULL pointer passed to LLDoubleLinkedList::deleteData()", 0);
-	}
-
-	mCurrentp = mHead.mNextp;
-
-	while (mCurrentp)
-	{
-		if (mCurrentp->mDatap == data)
-		{
-			b_found = TRUE;
-
-			// if there is a next one, fix it
-			if (mCurrentp->mNextp)
-			{
-				mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-			}
-			else // we are at end of list
-			{
-				mTail.mPrevp = mCurrentp->mPrevp;
-			}
-
-			// if there is a previous one, fix it
-			if (mCurrentp->mPrevp)
-			{
-				mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-			}
-			else // we are at beginning of list
-			{
-				mHead.mNextp = mCurrentp->mNextp;
-			}
-
-			// remove the node
-			mCurrentp->deleteData();
-			delete mCurrentp;
-			mCount--;
-			break;
-		}
-		mCurrentp = mCurrentp->mNextp;
-	}
-
-	// reset the list back to where it was
-	if (mCurrentp == mQueuep)
-	{
-		mCurrentp = mQueuep = NULL;
-	}
-	else
-	{
-		mCurrentp = mQueuep;
-	}
-
-	return b_found;
-}
-
-
-// remove all nodes from the list and delete the associated data
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::deleteAllData()
-{
-	mCurrentp = mHead.mNextp;
-
-	while (mCurrentp)
-	{
-		mQueuep = mCurrentp->mNextp;
-		mCurrentp->deleteData();
-		delete mCurrentp;
-		mCurrentp = mQueuep;
-	}
-
-	// reset mHead and mQueuep
-	mHead.mNextp = NULL;
-	mTail.mPrevp = NULL;
-	mCurrentp = mHead.mNextp;
-	mQueuep = mHead.mNextp;
-	mStateStackDepth = 0;
-	mCount = 0;
-}
-
-
-// remove all nodes from the list but do not delete associated data
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::removeAllNodes()
-{
-	mCurrentp = mHead.mNextp;
-
-	while (mCurrentp)
-	{
-		mQueuep = mCurrentp->mNextp;
-		mCurrentp->removeData();
-		delete mCurrentp;
-		mCurrentp = mQueuep;
-	}
-
-	// reset mHead and mCurrentp
-	mHead.mNextp = NULL;
-	mTail.mPrevp = NULL;
-	mCurrentp = mHead.mNextp;
-	mQueuep = mHead.mNextp;
-	mStateStackDepth = 0;
-	mCount = 0;
-}
-
-template <class DATA_TYPE>
-S32 LLDoubleLinkedList<DATA_TYPE>::getLength() const
-{
-//	U32	length = 0;
-//	for (LLDoubleLinkedNode<DATA_TYPE>* temp = mHead.mNextp; temp != NULL; temp = temp->mNextp)
-//	{
-//		length++;
-//	}
-	return mCount;
-}
-
-// check to see if data is in list
-// set mCurrentp and mQueuep to the target of search if found, otherwise set mCurrentp to mQueuep
-// return TRUE if found, FALSE if not found
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::checkData(const DATA_TYPE *data)
-{
-	mCurrentp = mHead.mNextp;
-
-	while (mCurrentp)
-	{
-		if (mCurrentp->mDatap == data)
-		{
-			mQueuep = mCurrentp;
-			return TRUE;
-		}
-		mCurrentp = mCurrentp->mNextp;
-	}
-
-	mCurrentp = mQueuep;
-	return FALSE;
-}
-
-// NOTE: This next two funtions are only included here 
-// for those too familiar with the LLLinkedList template class.
-// They are depreciated.  resetList() is unecessary while 
-// getCurrentData() is identical to getNextData() and has
-// a misleading name.
-//
-// The recommended way to loop through a list is as follows:
-//
-// datap = list.getFirstData();
-// while (datap)
-// {
-//     /* do stuff */
-//     datap = list.getNextData();
-// }
-
-	// place mCurrentp and mQueuep on first node
-	template <class DATA_TYPE>
-	void LLDoubleLinkedList<DATA_TYPE>::resetList()
-	{
-		mCurrentp = mHead.mNextp;
-		mQueuep = mHead.mNextp;
-		mStateStackDepth = 0;
-	}
-	
-	
-	// return the data currently pointed to, 
-	// set mCurrentp to that node and bump mQueuep down the list
-	template <class DATA_TYPE>
-	DATA_TYPE* LLDoubleLinkedList<DATA_TYPE>::getCurrentData()
-	{
-		if (mQueuep)
-		{
-			mCurrentp = mQueuep;
-			mQueuep = mQueuep->mNextp;
-			return mCurrentp->mDatap;
-		}
-		else
-		{
-			return NULL;
-		}
-	}
-
-
-// reset the list and return the data currently pointed to, 
-// set mCurrentp to that node and bump mQueuep down the list
-template <class DATA_TYPE>
-DATA_TYPE* LLDoubleLinkedList<DATA_TYPE>::getFirstData()
-{
-	mQueuep = mHead.mNextp;
-	mCurrentp = mQueuep;
-	if (mQueuep)
-	{
-		mQueuep = mQueuep->mNextp;
-		return mCurrentp->mDatap;
-	}
-	else
-	{
-		return NULL;
-	}
-}
-
-
-// reset the list and return the data at position n, set mCurentp 
-// to that node and bump mQueuep down the list
-// Note: n=0 will behave like getFirstData()
-template <class DATA_TYPE>
-DATA_TYPE* LLDoubleLinkedList<DATA_TYPE>::getNthData(U32 n)
-{
-	mCurrentp = mHead.mNextp;
-
-	if (mCurrentp)
-	{
-		for (U32 i=0; i<n; i++)
-		{
-			mCurrentp = mCurrentp->mNextp;
-			if (!mCurrentp)
-			{
-				break;
-			}		
-		}
-	}
-
-	if (mCurrentp)
-	{
-		// bump mQueuep down the list
-		mQueuep = mCurrentp->mNextp;
-		return mCurrentp->mDatap;
-	}
-	else
-	{
-		mQueuep = NULL;
-		return NULL;
-	}
-}
-
-
-// reset the list and return the last data in it, 
-// set mCurrentp to that node and bump mQueuep up the list
-template <class DATA_TYPE>
-DATA_TYPE* LLDoubleLinkedList<DATA_TYPE>::getLastData()
-{
-	mQueuep = mTail.mPrevp;
-	mCurrentp = mQueuep;
-	if (mQueuep)
-	{
-		mQueuep = mQueuep->mPrevp;
-		return mCurrentp->mDatap;
-	}
-	else
-	{
-		return NULL;
-	}
-}
-
-
-// return the data in mQueuep, 
-// set mCurrentp to mQueuep and bump mQueuep down the list
-template <class DATA_TYPE>
-DATA_TYPE* LLDoubleLinkedList<DATA_TYPE>::getNextData()
-{
-	if (mQueuep)
-	{
-		mCurrentp = mQueuep;
-		mQueuep = mQueuep->mNextp;
-		return mCurrentp->mDatap;
-	}
-	else
-	{
-		return NULL;
-	}
-}
-
-
-// return the data in mQueuep, 
-// set mCurrentp to mQueuep and bump mQueuep up the list
-template <class DATA_TYPE>
-DATA_TYPE* LLDoubleLinkedList<DATA_TYPE>::getPreviousData()
-{
-	if (mQueuep)
-	{
-		mCurrentp = mQueuep;
-		mQueuep = mQueuep->mPrevp;
-		return mCurrentp->mDatap;
-	}
-	else
-	{
-		return NULL;
-	}
-}
-
-
-// remove the Node at mCurrentp
-// set mCurrentp to mQueuep, or NULL if (mCurrentp == mQueuep)
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::removeCurrentData()
-{
-	if (mCurrentp)
-	{
-		// if there is a next one, fix it
-		if (mCurrentp->mNextp)
-		{
-			mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-		}
-		else	// otherwise we are at end of list
-		{
-			mTail.mPrevp = mCurrentp->mPrevp;
-		}
-
-		// if there is a previous one, fix it
-		if (mCurrentp->mPrevp)
-		{
-			mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-		}
-		else	// otherwise we are at beginning of list
-		{
-			mHead.mNextp = mCurrentp->mNextp;
-		}
-
-		// remove the node
-		mCurrentp->removeData();
-		delete mCurrentp;
-		mCount--;
-
-		// check for redundant pointing
-		if (mCurrentp == mQueuep)
-		{
-			mCurrentp = mQueuep = NULL;
-		}
-		else
-		{
-			mCurrentp = mQueuep;
-		}
-	}
-}
-
-
-// delete the Node at mCurrentp
-// set mCurrentp to mQueuep, or NULL if (mCurrentp == mQueuep) 
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::deleteCurrentData()
-{
-	if (mCurrentp)
-	{
-		// remove the node
-		// if there is a next one, fix it
-		if (mCurrentp->mNextp)
-		{
-			mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-		}
-		else	// otherwise we are at end of list
-		{
-			mTail.mPrevp = mCurrentp->mPrevp;
-		}
-
-		// if there is a previous one, fix it
-		if (mCurrentp->mPrevp)
-		{
-			mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-		}
-		else	// otherwise we are at beginning of list
-		{
-			mHead.mNextp = mCurrentp->mNextp;
-		}
-
-		// remove the LLDoubleLinkedNode
-		mCurrentp->deleteData();
-		delete mCurrentp;
-		mCount--;
-
-		// check for redundant pointing
-		if (mCurrentp == mQueuep)
-		{
-			mCurrentp = mQueuep = NULL;
-		}
-		else
-		{
-			mCurrentp = mQueuep;
-		}
-	}
-}
-
-
-// remove the Node at mCurrentp and insert it into newlist
-// set mCurrentp to mQueuep, or NULL if (mCurrentp == mQueuep)
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::moveCurrentData(LLDoubleLinkedList<DATA_TYPE> *newlist)
-{
-	if (mCurrentp)
-	{
-		// remove the node
-		// if there is a next one, fix it
-		if (mCurrentp->mNextp)
-		{
-			mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-		}
-		else	// otherwise we are at end of list
-		{
-			mTail.mPrevp = mCurrentp->mPrevp;
-		}
-
-		// if there is a previous one, fix it
-		if (mCurrentp->mPrevp)
-		{
-			mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-		}
-		else	// otherwise we are at beginning of list
-		{
-			mHead.mNextp = mCurrentp->mNextp;
-		}
-
-		// move the node to the new list
-		newlist->addNode(mCurrentp);
-
-		// check for redundant pointing
-		if (mCurrentp == mQueuep)
-		{
-			mCurrentp = mQueuep = NULL;
-		}
-		else
-		{
-			mCurrentp = mQueuep;
-		}
-	}
-}
-
-
-// Inserts the node previous to mCurrentp
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::insertNode(LLDoubleLinkedNode<DATA_TYPE> *nodep)
-{
-	// don't allow pointer to NULL to be passed
-	if (!nodep)
-	{
-		llerror("NULL pointer passed to LLDoubleLinkedList::insertNode()", 0);
-	}
-	if (!nodep->mDatap)
-	{
-		llerror("NULL data pointer passed to LLDoubleLinkedList::insertNode()", 0);
-	}
-
-	if (mCurrentp)
-	{
-		if (mCurrentp->mPrevp)
-		{
-			nodep->mPrevp = mCurrentp->mPrevp;
-			nodep->mNextp = mCurrentp;
-			mCurrentp->mPrevp->mNextp = nodep;
-			mCurrentp->mPrevp = nodep;
-		}
-		else	// at beginning of list
-		{
-			nodep->mPrevp = NULL;
-			nodep->mNextp = mCurrentp;
-			mHead.mNextp = nodep;
-			mCurrentp->mPrevp = nodep;
-		}
-		mCurrentp = mQueuep;
-	}
-	else	// add to front of list
-	{
-		addNode(nodep);
-	}
-}
-
-
-// insert the data in front of mCurrentp
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::insertData(DATA_TYPE *data)
-{
-	if (!data)
-	{
-		llerror("NULL data pointer passed to LLDoubleLinkedList::insertNode()", 0);
-	}
-	LLDoubleLinkedNode<DATA_TYPE> *node = new LLDoubleLinkedNode<DATA_TYPE>(data);
-	insertNode(node);
-	mCount++;
-}
-
-
-// if mCurrentp has a previous node then :
-//   * swaps mCurrentp with its previous
-//   * set mCurrentp to mQueuep
-// otherwise does nothing
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::swapCurrentWithPrevious()
-{
-	if (mCurrentp)
-	{
-		if (mCurrentp->mPrevp)
-		{
-			// Pull mCurrentp out of list
-			mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-			if (mCurrentp->mNextp)
-			{
-				mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-			}
-			else 	// mCurrentp was at end of list
-			{
-				mTail.mPrevp = mCurrentp->mPrevp;
-			}
-
-			// Fix mCurrentp's pointers
-			mCurrentp->mNextp = mCurrentp->mPrevp;
-			mCurrentp->mPrevp = mCurrentp->mNextp->mPrevp;
-			mCurrentp->mNextp->mPrevp = mCurrentp;
-
-			if (mCurrentp->mPrevp)
-			{
-				// Fix the backward pointer of mCurrentp's new previous
-				mCurrentp->mPrevp->mNextp = mCurrentp;
-			}
-			else	// mCurrentp is now at beginning of list
-			{
-				mHead.mNextp = mCurrentp;
-			}
-
-			// Set the list back to the way it was
-			mCurrentp = mQueuep;
-		}
-	}
-}
-
-
-// if mCurrentp has a next node then :
-//   * swaps mCurrentp with its next
-//   * set mCurrentp to mQueuep
-// otherwise does nothing
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::swapCurrentWithNext()
-{
-	if (mCurrentp)
-	{
-		if (mCurrentp->mNextp)
-		{
-			// Pull mCurrentp out of list
-			mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-			if (mCurrentp->mPrevp)
-			{
-				mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-			}
-			else 	// mCurrentp was at beginning of list
-			{
-				mHead.mNextp = mCurrentp->mNextp;
-			}
-
-			// Fix mCurrentp's pointers
-			mCurrentp->mPrevp = mCurrentp->mNextp;
-			mCurrentp->mNextp = mCurrentp->mPrevp->mNextp;
-			mCurrentp->mPrevp->mNextp = mCurrentp;
-
-			if (mCurrentp->mNextp)
-			{
-				// Fix the back pointer of mCurrentp's new next
-				mCurrentp->mNextp->mPrevp = mCurrentp;
-			}
-			else 	// mCurrentp is now at end of list
-			{
-				mTail.mPrevp = mCurrentp;
-			}
-			
-			// Set the list back to the way it was
-			mCurrentp = mQueuep;
-		}
-	}
-}
-
-// move mCurrentp to the front of the list
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::moveCurrentToFront()
-{
-	if (mCurrentp)
-	{
-		// if there is a previous one, fix it
-		if (mCurrentp->mPrevp)
-		{
-			mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-		}
-		else	// otherwise we are at beginning of list
-		{
-			// check for redundant pointing
-			if (mCurrentp == mQueuep)
-			{
-				mCurrentp = mQueuep = NULL;
-			}
-			else
-			{
-				mCurrentp = mQueuep;
-			}
-			return;
-		}
-
-		// if there is a next one, fix it
-		if (mCurrentp->mNextp)
-		{
-			mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-		}
-		else	// otherwise we are at end of list
-		{
-			mTail.mPrevp = mCurrentp->mPrevp;
-		}
-
-		// add mCurrentp to beginning of list
-		mCurrentp->mNextp = mHead.mNextp;
-		mHead.mNextp->mPrevp = mCurrentp;	// mHead.mNextp MUST be valid, 
-											// or the list had only one node
-											// and we would have returned already
-		mCurrentp->mPrevp = NULL;
-		mHead.mNextp = mCurrentp;
-
-		// check for redundant pointing
-		if (mCurrentp == mQueuep)
-		{
-			mCurrentp = mQueuep = NULL;
-		}
-		else
-		{
-			mCurrentp = mQueuep;
-		}
-	}
-
-}
-
-// move mCurrentp to the end of the list
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::moveCurrentToEnd()
-{
-	if (mCurrentp)
-	{
-		// if there is a next one, fix it
-		if (mCurrentp->mNextp)
-		{
-			mCurrentp->mNextp->mPrevp = mCurrentp->mPrevp;
-		}
-		else	// otherwise we are at end of list and we're done
-		{
-			// check for redundant pointing
-			if (mCurrentp == mQueuep)
-			{
-				mCurrentp = mQueuep = NULL;
-			}
-			else
-			{
-				mCurrentp = mQueuep;
-			}
-			return;
-		}
-
-		// if there is a previous one, fix it
-		if (mCurrentp->mPrevp)
-		{
-			mCurrentp->mPrevp->mNextp = mCurrentp->mNextp;
-		}
-		else	// otherwise we are at beginning of list
-		{
-			mHead.mNextp = mCurrentp->mNextp;
-		}
-
-		// add mCurrentp to end of list
-		mCurrentp->mPrevp = mTail.mPrevp;
-		mTail.mPrevp->mNextp = mCurrentp;	// mTail.mPrevp MUST be valid, 
-											// or the list had only one node
-											// and we would have returned already
-		mCurrentp->mNextp = NULL;
-		mTail.mPrevp = mCurrentp;
-
-		// check for redundant pointing
-		if (mCurrentp == mQueuep)
-		{
-			mCurrentp = mQueuep = NULL;
-		}
-		else
-		{
-			mCurrentp = mQueuep;
-		}
-	}
-}
-
-
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::setInsertBefore(BOOL (*insert_before)(DATA_TYPE *first, DATA_TYPE *second) )
-{
-	mInsertBefore = insert_before;
-}
-
-
-// add data in front of the first node for which mInsertBefore(datap, node->mDatap) returns TRUE
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::addDataSorted(DATA_TYPE *datap)
-{
-	// don't allow NULL to be passed to addData()
-	if (!datap)
-	{
-		llerror("NULL pointer passed to LLDoubleLinkedList::addDataSorted()", 0);
-	}
-
-	// has mInsertBefore not been set?
-	if (!mInsertBefore)
-	{
-		addData(datap);
-		return FALSE;
-	}
-
-	// is the list empty?
-	if (!mHead.mNextp)
-	{
-		addData(datap);
-		return TRUE;
-	}
-
-	// Note: this step has been added so that the behavior of LLDoubleLinkedList
-	// is as rigorous as the LLLinkedList class about adding duplicate nodes.
-	// Duplicate nodes can cause a problem when sorting if mInsertBefore(foo, foo) 
-	// returns TRUE.  However, if mInsertBefore(foo, foo) returns FALSE, then there 
-	// shouldn't be any reason to exclude duplicate nodes (as we do here).
-	if (checkData(datap))
-	{
-		return FALSE;
-	}
-	
-	mCurrentp = mHead.mNextp;
-	while (mCurrentp)
-	{
-		// check to see if datap is already in the list
-		if (datap == mCurrentp->mDatap)
-		{
-			return FALSE;
-		}
-		else if (mInsertBefore(datap, mCurrentp->mDatap))
-		{
-			insertData(datap);
-			return TRUE;
-		}
-		mCurrentp = mCurrentp->mNextp;
-	}
-	
-	addDataAtEnd(datap);
-	return TRUE;
-}
-
-
-// bubble-sort until sorted and return TRUE if anything was sorted
-// leaves mQueuep pointing at last node that was swapped with its mNextp
-//
-// NOTE: if you find this function looping for really long times, then you
-// probably need to check your implementation of mInsertBefore(a,b) and make 
-// sure it does not return TRUE when (a == b)!
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::bubbleSort()
-{
-	BOOL b_swapped = FALSE;
-	U32 count = 0;
-	while (lazyBubbleSort()) 
-	{
-		b_swapped = TRUE;
-		if (count++ > 0x7FFFFFFF)
-		{
-			llwarning("LLDoubleLinkedList::bubbleSort() : too many passes...", 1);
-			llwarning("    make sure the mInsertBefore(a, b) does not return TRUE for a == b", 1);
-			break;
-		}
-	}
-	return b_swapped;
-}
-
-
-// do a single bubble-sort pass and return TRUE if anything was sorted
-// leaves mQueuep pointing at last node that was swapped with its mNextp
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::lazyBubbleSort()
-{
-	// has mInsertBefore been set?
-	if (!mInsertBefore)
-	{
-		return FALSE;
-	}
-
-	// is list empty?
-	mCurrentp = mHead.mNextp;
-	if (!mCurrentp)
-	{
-		return FALSE;
-	}
-
-	BOOL b_swapped = FALSE;
-
-	// the sort will exit after 0x7FFFFFFF nodes or the end of the list, whichever is first
-	S32  length = 0x7FFFFFFF;
-	S32  count = 0;
-
-	while (mCurrentp  &&  mCurrentp->mNextp  &&  count<length)
-	{
-		if (mInsertBefore(mCurrentp->mNextp->mDatap, mCurrentp->mDatap))
-		{
-			b_swapped = TRUE;
-			mQueuep = mCurrentp;
-			swapCurrentWithNext();	// sets mCurrentp to mQueuep
-		}
-		count++;
-		mCurrentp = mCurrentp->mNextp;
-	}
-	
-	return b_swapped;
-}
-
-
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::pushState()
-{
-	if (mStateStackDepth < LLDOUBLE_LINKED_LIST_STATE_STACK_DEPTH)
-	{
-		*(mQueuepStack + mStateStackDepth) = mQueuep;
-		*(mCurrentpStack + mStateStackDepth) = mCurrentp;
-		mStateStackDepth++;
-		return TRUE;
-	}
-	return FALSE;
-}
-
-
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::popState()
-{
-	if (mStateStackDepth > 0)
-	{
-		mStateStackDepth--;
-		mQueuep = *(mQueuepStack + mStateStackDepth);
-		mCurrentp = *(mCurrentpStack + mStateStackDepth);
-		return TRUE;
-	}
-	return FALSE;
-}
-
-
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::clearStateStack()
-{
-	mStateStackDepth = 0;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-// private members
-//////////////////////////////////////////////////////////////////////////////////////////
-
-// add node to beginning of list
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::addNode(LLDoubleLinkedNode<DATA_TYPE> *nodep)
-{
-	// add the node to the front of the list
-	nodep->mPrevp = NULL;
-	nodep->mNextp = mHead.mNextp;
-	mHead.mNextp = nodep;
-
-	// if there's something in the list, fix its back pointer
-	if (nodep->mNextp)
-	{
-		nodep->mNextp->mPrevp = nodep;
-	}
-	else	// otherwise fix the tail node
-	{
-		mTail.mPrevp = nodep;
-	}
-
-	mCurrentp = mQueuep;
-}
-
-
-// add node to end of list
-// set mCurrentp to mQueuep
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::addNodeAtEnd(LLDoubleLinkedNode<DATA_TYPE> *node)
-{
-	// add the node to the end of the list
-	node->mNextp = NULL;
-	node->mPrevp = mTail.mPrevp;
-	mTail.mPrevp = node;
-
-	// if there's something in the list, fix its back pointer
-	if (node->mPrevp)
-	{
-		node->mPrevp->mNextp = node;
-	}
-	else	// otherwise fix the head node
-	{
-		mHead.mNextp = node;
-	}
-
-	mCurrentp = mQueuep;
-}
-
-
-// randomly move nodes in the list for DEBUG (or Discordian) purposes
-// sets mCurrentp and mQueuep to top of list
-template <class DATA_TYPE>
-void LLDoubleLinkedList<DATA_TYPE>::scramble()
-{
-	S32 random_number;
-	DATA_TYPE *datap = getFirstData();
-	while(datap)
-	{
-		random_number = ll_rand(5);
-
-		if (0 == random_number)
-		{
-			removeCurrentData();
-			addData(datap);
-		}
-		else if (1 == random_number)
-		{
-			removeCurrentData();
-			addDataAtEnd(datap);
-		}
-		else if (2 == random_number)
-		{
-			swapCurrentWithPrevious();
-		}
-		else if (3 == random_number)
-		{
-			swapCurrentWithNext();
-		}
-		datap = getNextData();
-	}
-	mQueuep = mHead.mNextp;
-	mCurrentp = mQueuep;
-}
-
-template <class DATA_TYPE>
-BOOL LLDoubleLinkedList<DATA_TYPE>::isEmpty()
-{
-	return (mCount == 0);
-}
-
-
-#endif
diff --git a/indra/llcommon/llassoclist.h b/indra/llcommon/llassoclist.h
deleted file mode 100644
index 2950504155..0000000000
--- a/indra/llcommon/llassoclist.h
+++ /dev/null
@@ -1,296 +0,0 @@
-/** 
- * @file llassoclist.h
- * @brief LLAssocList class header file
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLASSOCLIST_H
-#define LL_LLASSOCLIST_H
-
-//------------------------------------------------------------------------
-// LLAssocList is an associative list container class.
-//
-// The implementation is a single linked list.
-// Both index and value objects are stored by value (not reference).
-// If pointer values are specified for index and/or value, this
-// container does NOT assume ownership of the referenced objects,
-// and does NOT delete() them on removal or destruction of the container.
-//
-// Note that operations are generally not optimized, and may of them
-// are O(n) complexity.
-//------------------------------------------------------------------------
-
-#include <iostream>
-
-template<class INDEX_TYPE, class VALUE_TYPE>
-class LLAssocList
-{
-private:
-	// internal list node type
-	class Node
-	{
-	public:
-		Node(const INDEX_TYPE &index, const VALUE_TYPE &value, Node *next)
-		{
-			mIndex = index;
-			mValue = value;
-			mNext = next;
-		}
-		~Node() { }
-		INDEX_TYPE	mIndex;
-		VALUE_TYPE	mValue;
-		Node		*mNext;
-	};
-
-	// head of the linked list
-	Node *mHead;
-
-public:
-	// Constructor
-	LLAssocList()
-	{
-		mHead = NULL;
-	}
-
-	// Destructor
-	~LLAssocList()
-	{
-		removeAll();
-	}
-
-	// Returns TRUE if list is empty.
-	BOOL isEmpty()
-	{
-		return (mHead == NULL);
-	}
-
-	// Returns the number of items in the list.
-	U32 length()
-	{
-		U32 count = 0;
-		for (	Node *node = mHead;
-				node;
-				node = node->mNext )
-		{
-			count++;
-		}
-		return count;
-	}
-
-	// Removes item with the specified index.
-	BOOL remove( const INDEX_TYPE &index )
-	{
-		if (!mHead)
-			return FALSE;
-
-		if (mHead->mIndex == index)
-		{
-			Node *node = mHead;
-			mHead = mHead->mNext;
-			delete node;
-			return TRUE;
-		}
-
-		for (	Node *prev = mHead;
-				prev->mNext;
-				prev = prev->mNext )
-		{
-			if (prev->mNext->mIndex == index)
-			{
-				Node *node = prev->mNext;
-				prev->mNext = prev->mNext->mNext;
-				delete node;
-				return TRUE;
-			}
-		}
-		return FALSE;
-	}
-
-	// Removes all items from the list.
-	void removeAll()
-	{
-		while ( mHead )
-		{
-			Node *node = mHead;
-			mHead = mHead->mNext;
-			delete node;
-		}
-	}
-
-	// Adds a new item to the head of the list,
-	// removing any existing item with same index.
-	void addToHead( const INDEX_TYPE &index, const VALUE_TYPE &value )
-	{
-		remove(index);
-		Node *node = new Node(index, value, mHead);
-		mHead = node;
-	}
-
-	// Adds a new item to the end of the list,
-	// removing any existing item with the same index.
-	void addToTail( const INDEX_TYPE &index, const VALUE_TYPE &value )
-	{
-		remove(index);
-		Node *node = new Node(index, value, NULL);
-		if (!mHead)
-		{
-			mHead = node;
-			return;
-		}
-		for (	Node *prev=mHead;
-				prev;
-				prev=prev->mNext )
-		{
-			if (!prev->mNext)
-			{
-				prev->mNext=node;
-				return;
-			}
-		}
-	}
-
-	// Sets the value of a specified index.
-	// If index does not exist, a new value will be added only if
-	// 'addIfNotFound' is set to TRUE.
-	// Returns TRUE if successful.
-	BOOL setValue( const INDEX_TYPE &index, const VALUE_TYPE &value, BOOL addIfNotFound=FALSE )
-	{
-		VALUE_TYPE *valueP = getValue(index);
-		if (valueP)
-		{
-			*valueP = value;
-			return TRUE;
-		}
-		if (!addIfNotFound)
-			return FALSE;
-		addToTail(index, value);
-		return TRUE;
-	}
-
-	// Sets the ith value in the list.
-	// A new value will NOT be addded, if the ith value does not exist.
-	// Returns TRUE if successful.
-	BOOL setValueAt( U32 i, const VALUE_TYPE &value )
-	{
-		VALUE_TYPE *valueP = getValueAt(i);
-		if (valueP)
-		{
-			*valueP = value;
-			return TRUE;
-		}
-		return FALSE;
-	}
-
-	// Returns a pointer to the value for the specified index,
-	// or NULL if no item found.
-	VALUE_TYPE *getValue( const INDEX_TYPE &index )
-	{
-		for (	Node *node = mHead;
-				node;
-				node = node->mNext )
-		{
-			if (node->mIndex == index)
-				return &node->mValue;
-		}
-		return NULL;
-	}
-
-	// Returns a pointer to the ith value in the list, or
-	// NULL if i is not valid.
-	VALUE_TYPE *getValueAt( U32 i )
-	{
-		U32 count = 0;
-		for (	Node *node = mHead;
-				node;
-				node = node->mNext )
-		{
-			if (count == i)
-				return &node->mValue;
-			count++;
-		}
-		return NULL;
-	}
-
-	// Returns a pointer to the index for the specified index,
-	// or NULL if no item found.
-	INDEX_TYPE *getIndex( const INDEX_TYPE &index )
-	{
-		for (	Node *node = mHead;
-				node;
-				node = node->mNext )
-		{
-			if (node->mIndex == index)
-				return &node->mIndex;
-		}
-		return NULL;
-	}
-
-	// Returns a pointer to the ith index in the list, or
-	// NULL if i is not valid.
-	INDEX_TYPE *getIndexAt( U32 i )
-	{
-		U32 count = 0;
-		for (	Node *node = mHead;
-				node;
-				node = node->mNext )
-		{
-			if (count == i)
-				return &node->mIndex;
-			count++;
-		}
-		return NULL;
-	}
-
-	// Returns a pointer to the value for the specified index,
-	// or NULL if no item found.
-	VALUE_TYPE *operator[](const INDEX_TYPE &index)
-	{
-		return getValue(index);
-	}
-
-	// Returns a pointer to the ith value in the list, or
-	// NULL if i is not valid.
-	VALUE_TYPE *operator[](U32 i)
-	{
-		return getValueAt(i);
-	}
-
-	// Prints the list contents to the specified stream.
-	friend std::ostream &operator<<( std::ostream &os, LLAssocList &map )
-	{
-		os << "{";
-		for (	Node *node = map.mHead;
-				node;
-				node = node->mNext )
-		{
-			os << "<" << node->mIndex << ", " << node->mValue << ">";
-			if (node->mNext)
-				os << ", ";
-		}
-		os << "}";
-
-		return os;
-	}
-};
-
-#endif // LL_LLASSOCLIST_H
diff --git a/indra/llcommon/lldarrayptr.h b/indra/llcommon/lldarrayptr.h
deleted file mode 100644
index c9a0b204d1..0000000000
--- a/indra/llcommon/lldarrayptr.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/** 
- * @file lldarrayptr.h
- * @brief Wrapped std::vector for backward compatibility.
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-#ifndef LL_LLDARRAYPTR_H
-#define LL_LLDARRAYPTR_H
-
-#include "lldarray.h"
-
-template <class Type, int BlockSize = 32> 
-class LLDynamicArrayPtr : public LLDynamicArray<Type, BlockSize>
-{
-};
-
-#endif // LL_LLDARRAYPTR_H
diff --git a/indra/llcommon/lldeleteutils.h b/indra/llcommon/lldeleteutils.h
deleted file mode 100644
index f250dc3028..0000000000
--- a/indra/llcommon/lldeleteutils.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/** 
- * @file lldeleteutils.h
- * @brief Utility functions to simplify some common pointer-munging idioms.
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-#ifndef LL_DELETE_UTILS_H
-#define LL_DELETE_UTILS_H
-
-// Simple utility functions to eventually replace the common 2-line
-// idiom scattered throughout the viewer codebase.  Note that where
-// possible we would rather be using smart pointers of some sort.
-
-template <class T>
-inline void deleteAndClear(T*& ptr)
-{
-	delete ptr;
-	ptr = NULL;
-}
-
-template <class T>
-inline void deleteAndClearArray(T*& array_ptr)
-{
-	delete[] array_ptr;
-	array_ptr = NULL;
-}
-
-#endif
diff --git a/indra/llcommon/lldepthstack.h b/indra/llcommon/lldepthstack.h
index d9db54efc7..ac435a30fa 100644
--- a/indra/llcommon/lldepthstack.h
+++ b/indra/llcommon/lldepthstack.h
@@ -27,17 +27,20 @@
 #ifndef LL_LLDEPTHSTACK_H
 #define LL_LLDEPTHSTACK_H
 
-#include "linked_lists.h"
+#include "llstl.h"
 
 template <class DATA_TYPE> class LLDepthStack
 {
 private:
-	LLLinkedList<DATA_TYPE> mStack;
+	std::deque<DATA_TYPE*>	mStack;
 	U32						mCurrentDepth;
 	U32						mMaxDepth;
 
 public:
-	LLDepthStack() : mCurrentDepth(0), mMaxDepth(0) {}
+	LLDepthStack() 
+	:	mCurrentDepth(0), mMaxDepth(0) 
+	{}
+
 	~LLDepthStack()	{}
 
 	void setDepth(U32 depth)
@@ -54,24 +57,27 @@ public:
 	{ 
 		if (mCurrentDepth < mMaxDepth)
 		{
-			mStack.addData(data); 
+			mStack.push_back(data); 
 			mCurrentDepth++;
 		}
 		else
 		{
 			// the last item falls off stack and is deleted
-			mStack.getLastData();
-			mStack.deleteCurrentData();	
-			mStack.addData(data);
+			if (!mStack.empty())
+			{
+				mStack.pop_front();
+			}
+			mStack.push_back(data);
 		}
 	}
 	
 	DATA_TYPE *pop()
 	{ 
-		DATA_TYPE *tempp = mStack.getFirstData(); 
-		if (tempp)
+		DATA_TYPE *tempp = NULL;
+		if (!mStack.empty())
 		{
-			mStack.removeCurrentData(); 
+			tempp = mStack.back();
+			mStack.pop_back(); 
 			mCurrentDepth--;
 		}
 		return tempp; 
@@ -79,20 +85,20 @@ public:
 	
 	DATA_TYPE *check()
 	{ 
-		DATA_TYPE *tempp = mStack.getFirstData(); 
-		return tempp; 
+		return mStack.empty() ? NULL : mStack.back();
 	}
 	
 	void deleteAllData()
 	{ 
 		mCurrentDepth = 0;
-		mStack.deleteAllData(); 
+		std::for_each(mStack.begin(), mStack.end(), DeletePointer());
+		mStack.clear(); 
 	}
 	
 	void removeAllNodes()
 	{ 
 		mCurrentDepth = 0;
-		mStack.removeAllNodes(); 
+		mStack.clear(); 
 	}
 };
 
diff --git a/indra/llcommon/lldlinked.h b/indra/llcommon/lldlinked.h
deleted file mode 100644
index 3f7c197be7..0000000000
--- a/indra/llcommon/lldlinked.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/** 
- * @file lldlinked.h
- * @brief Declaration of the LLDLinked class.
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-#ifndef LL_LLDLINKED_H
-#define LL_LLDLINKED_H
-
-template <class Type> class LLDLinked
-{
-	LLDLinked* mNextp;
-	LLDLinked* mPrevp;
-public:
-
-	Type*   getNext()  { return (Type*)mNextp; }
-	Type*   getPrev()  { return (Type*)mPrevp; }
-	Type*   getFirst() { return (Type*)mNextp; }
-
-	void    init()
-	{
-		mNextp = mPrevp = NULL;
-	}
-
-	void    unlink()
-	{
-		if (mPrevp) mPrevp->mNextp = mNextp;
-		if (mNextp) mNextp->mPrevp = mPrevp;
-	}
-
-	 LLDLinked() { mNextp = mPrevp = NULL; }
-	virtual ~LLDLinked() { unlink(); }
-
-	virtual void    deleteAll()
-	{
-		Type *curp = getFirst();
-		while(curp)
-		{
-			Type *nextp = curp->getNext();
-			curp->unlink();
-			delete curp;
-			curp = nextp;
-		}
-	}
-
-	void relink(Type &after)
-	{
-		LLDLinked *afterp = (LLDLinked*)&after;
-		afterp->mPrevp = this;
-		mNextp = afterp;
-	}
-
-	virtual void    append(Type& after)
-	{
-		LLDLinked *afterp = (LLDLinked*)&after;
-		afterp->mPrevp    = this;
-		afterp->mNextp    = mNextp;
-		if (mNextp) mNextp->mPrevp = afterp;
-		mNextp            = afterp;
-	}
-
-	virtual void    insert(Type& before)
-	{
-		LLDLinked *beforep = (LLDLinked*)&before;
-		beforep->mNextp    = this;
-		beforep->mPrevp    = mPrevp;
-		if (mPrevp) mPrevp->mNextp = beforep;
-		mPrevp             = beforep;
-	}
-
-	virtual void    put(Type& obj) { append(obj); }
-};
-
-#endif
diff --git a/indra/llcommon/lldqueueptr.h b/indra/llcommon/lldqueueptr.h
deleted file mode 100644
index 9fe08191e1..0000000000
--- a/indra/llcommon/lldqueueptr.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/** 
- * @file lldqueueptr.h
- * @brief LLDynamicQueuePtr declaration
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-#ifndef LL_LLDQUEUEPTR_H
-#define LL_LLDQUEUEPTR_H
-
-template <class Type> 
-class LLDynamicQueuePtr
-{
-public:
-	enum
-	{
-		OKAY = 0,
-		FAIL = -1
-	};
-	
-	LLDynamicQueuePtr(const S32 size=8);
-	~LLDynamicQueuePtr();
-
-	void init();
-	void destroy();
-	void reset();
-	void reallocate(U32 newsize);
-
-	// ACCESSORS
-	const Type& get(const S32 index) const;					// no bounds checking
-	Type&       get(const S32 index);						// no bounds checking
-	const Type& operator []	(const S32 index) const			{ return get(index); }
-	Type&       operator []	(const S32 index)				{ return get(index); }
-	S32			find(const Type &obj) const;
-
-	S32			count() const								{ return (mLastObj >= mFirstObj ? mLastObj - mFirstObj : mLastObj + mMaxObj - mFirstObj); }
-	S32			getMax() const								{ return mMaxObj; }
-	S32			getFirst() const       { return mFirstObj; }
-	S32			getLast () const       { return mLastObj; }
-
-	// MANIPULATE
-	S32         push(const Type &obj);					// add to end of Queue, returns index from start
-	S32			pull(      Type &obj);			        // pull from Queue, returns index from start
-
-	S32			remove   (S32 index);				    // remove by index
-	S32			removeObj(const Type &obj);				// remove by object
-
-protected:
-	S32           mFirstObj, mLastObj, mMaxObj;
-	Type*		  mMemory;
-
-public:
-
-	void print()
-	{
-		/*
-		Convert this to llinfos if it's intended to be used - djs 08/30/02
-
-		printf("Printing from %d to %d (of %d): ",mFirstObj, mLastObj, mMaxObj);
-
-		if (mFirstObj <= mLastObj)
-		{
-			for (S32 i=mFirstObj;i<mLastObj;i++)
-			{
-				printf("%d ",mMemory[i]);
-			}
-		}
-		else
-		{
-			for (S32 i=mFirstObj;i<mMaxObj;i++)
-			{
-				printf("%d ",mMemory[i]);
-			}
-			for (i=0;i<mLastObj;i++)
-			{
-				printf("%d ",mMemory[i]);
-			}
-		}
-		printf("\n");
-		*/
-	}
-
-};
-
-
-//--------------------------------------------------------
-// LLDynamicQueuePtrPtr implementation
-//--------------------------------------------------------
-
-
-template <class Type>
-inline LLDynamicQueuePtr<Type>::LLDynamicQueuePtr(const S32 size)
-{
-	init();
-	reallocate(size);
-}
-
-template <class Type>
-inline LLDynamicQueuePtr<Type>::~LLDynamicQueuePtr()
-{
-	destroy();
-}
-
-template <class Type>
-inline void LLDynamicQueuePtr<Type>::init()
-{ 
-	mFirstObj    = 0;
-	mLastObj     = 0;
-	mMaxObj      = 0;
-	mMemory      = NULL;
-}
-
-template <class Type>
-inline void LLDynamicQueuePtr<Type>::reallocate(U32 newsize)
-{ 
-	if (newsize)
-	{
-		if (mFirstObj > mLastObj && newsize > mMaxObj)
-		{
-			Type* new_memory = new Type[newsize];
-
-			llassert(new_memory);
-
-			S32 _count = count();
-			S32 i, m = 0;
-			for (i=mFirstObj; i < mMaxObj; i++)
-			{
-				new_memory[m++] = mMemory[i];
-			}
-			for (i=0; i <=mLastObj; i++)
-			{
-				new_memory[m++] = mMemory[i];
-			}
-
-			delete[] mMemory;
-			mMemory = new_memory;
-
-			mFirstObj = 0;
-			mLastObj  = _count;
-		}
-		else
-		{
-			Type* new_memory = new Type[newsize];
-
-			llassert(new_memory);
-
-			S32 i, m = 0;
-			for (i=0; i < mLastObj; i++)
-			{
-				new_memory[m++] = mMemory[i];
-			}
-			delete[] mMemory;
-			mMemory = new_memory;
-		}
-	}
-	else if (mMemory)
-	{
-		delete[] mMemory;
-		mMemory = NULL;
-	}
-
-	mMaxObj = newsize;
-}
-
-template <class Type>
-inline void LLDynamicQueuePtr<Type>::destroy()
-{
-	reset();
-	delete[] mMemory;
-	mMemory = NULL;
-}
-
-
-template <class Type>
-void LLDynamicQueuePtr<Type>::reset()	   
-{ 
-	for (S32 i=0; i < mMaxObj; i++)
-	{
-		get(i) = NULL; // unrefs for pointers
-	}
-
-	mFirstObj    = 0;
-	mLastObj     = 0;
-}
-
-
-template <class Type>
-inline S32 LLDynamicQueuePtr<Type>::find(const Type &obj) const
-{
-	S32 i;
-	if (mFirstObj <= mLastObj)
-	{
-		for ( i = mFirstObj; i < mLastObj; i++ )
-		{
-			if (mMemory[i] == obj)
-			{
-				return i;
-			}
-		}
-	}
-	else
-	{
-		for ( i = mFirstObj; i < mMaxObj; i++ )
-		{
-			if (mMemory[i] == obj)
-			{
-				return i;
-			}
-		}
-		for ( i = 0; i < mLastObj; i++ )
-		{
-			if (mMemory[i] == obj)
-			{
-				return i;
-			}
-		}
-	}
-
-	return FAIL;
-}
-
-template <class Type>
-inline S32 LLDynamicQueuePtr<Type>::remove(S32 i)
-{
-	if (mFirstObj > mLastObj)
-	{
-		if (i >= mFirstObj && i < mMaxObj)
-		{
-			while( i > mFirstObj)
-			{
-				mMemory[i] = mMemory[i-1];
-				i--;
-			}
-			mMemory[mFirstObj] = NULL;
-			mFirstObj++;
-			if (mFirstObj >= mMaxObj) mFirstObj = 0;
-
-			return count();
-		}
-		else if (i < mLastObj && i >= 0)
-		{
-			while(i < mLastObj)
-			{
-				mMemory[i] = mMemory[i+1];
-				i++;
-			}
-			mMemory[mLastObj] = NULL;
-			mLastObj--;
-			if (mLastObj < 0) mLastObj = mMaxObj-1;
-
-			return count();
-		}
-	}
-	else if (i <= mLastObj && i >= mFirstObj)
-	{
-		while(i < mLastObj)
-		{
-			mMemory[i] = mMemory[i+1];
-			i++;
-		}
-		mMemory[mLastObj] = NULL;
-		mLastObj--;
-		if (mLastObj < 0) mLastObj = mMaxObj-1;
-
-		return count();
-	}
-
-	
-	return FAIL;
-}
-
-template <class Type>
-inline S32 LLDynamicQueuePtr<Type>::removeObj(const Type& obj)
-{
-	S32 ind = find(obj);
-	if (ind >= 0)
-	{
-		return remove(ind);
-	}
-	return FAIL;
-}
-
-template <class Type>
-inline S32	LLDynamicQueuePtr<Type>::push(const Type &obj) 
-{
-	if (mMaxObj - count() <= 1)
-	{
-		reallocate(mMaxObj * 2);
-	}
-
-	mMemory[mLastObj++] = obj;
-
-	if (mLastObj >= mMaxObj) 
-	{
-		mLastObj = 0;
-	}
-
-	return count();
-}
-
-template <class Type>
-inline S32	LLDynamicQueuePtr<Type>::pull(Type &obj) 
-{
-	obj = NULL;
-
-	if (count() < 1) return -1;
-
-	obj = mMemory[mFirstObj];
-	mMemory[mFirstObj] = NULL;
-
-	mFirstObj++;
-
-	if (mFirstObj >= mMaxObj) 
-	{
-		mFirstObj = 0;
-	}
-
-	return count();
-}
-
-template <class Type>
-inline const Type& LLDynamicQueuePtr<Type>::get(const S32 i) const
-{
-	return mMemory[i];
-}
-
-template <class Type>
-inline Type& LLDynamicQueuePtr<Type>::get(const S32 i)
-{
-	return mMemory[i];
-}
-
-
-#endif // LL_LLDQUEUEPTR_H
diff --git a/indra/llcommon/llenum.h b/indra/llcommon/llenum.h
deleted file mode 100644
index f57b2bc0b5..0000000000
--- a/indra/llcommon/llenum.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/** 
- * @file llenum.h
- * @author Tom Yedwab
- * @brief Utility class for storing enum value <-> string lookup.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLENUM_H
-#define LL_LLENUM_H
-
-class LLEnum
-{
-public:
-	typedef std::pair<const std::string, const U32> enum_t;
-	enum
-	{
-		UNDEFINED = 0xffffffff,
-	};
-
-	LLEnum(const enum_t values_array[], const U32 length)
-	{
-		for (U32 i=0; i<length; ++i)
-		{
-			mEnumMap.insert(values_array[i]);
-			if (values_array[i].second >= mEnumArray.size())
-			{
-				mEnumArray.resize(values_array[i].second+1);
-			}
-			mEnumArray[values_array[i].second] = values_array[i].first;
-		}
-	}
-
-	U32 operator[](std::string str)
-	{
-		std::map<const std::string, const U32>::iterator itor;
-		itor = mEnumMap.find(str);
-		if (itor != mEnumMap.end())
-		{
-			return itor->second;
-		}
-		return UNDEFINED;
-	}
-
-	const std::string operator[](U32 index)
-	{
-		if (index < mEnumArray.size())
-		{
-			return mEnumArray[index];
-		}
-		return "";
-	}
-
-private:
-	std::map<const std::string, const U32> mEnumMap;
-	std::vector<std::string> mEnumArray;
-};
-
-#endif // LL_LLENUM_H
diff --git a/indra/llcommon/llindexedqueue.h b/indra/llcommon/llindexedqueue.h
deleted file mode 100644
index aa2675d87d..0000000000
--- a/indra/llcommon/llindexedqueue.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/** 
- * @file llindexedqueue.h
- * @brief An indexed FIFO queue, where only one element with each key
- * can be in the queue.
- *
- * $LicenseInfo:firstyear=2003&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLINDEXEDQUEUE_H
-#define LL_LLINDEXEDQUEUE_H
-
-// An indexed FIFO queue, where only one element with each key can be in the queue.
-// This is ONLY used in the interest list, you'll probably want to review this code
-// carefully if you want to use it elsewhere - Doug
-
-template <typename Type> 
-class LLIndexedQueue
-{
-protected:
-	typedef std::deque<Type> type_deque;
-	type_deque mQueue;
-	std::set<Type> mKeySet;
-
-public:
-	LLIndexedQueue() {}
-
-	// move_if_there is an O(n) operation
-	bool push_back(const Type &value, bool move_if_there = false)
-	{
-		if (mKeySet.find(value) != mKeySet.end())
-		{
-			// Already on the queue
-			if (move_if_there)
-			{
-				// Remove the existing entry.
-				typename type_deque::iterator it;
-				for (it = mQueue.begin(); it != mQueue.end(); ++it)
-				{
-					if (*it == value)
-					{
-						break;
-					}
-				}
-
-				// This HAS to succeed, otherwise there's a serious bug in the keyset implementation
-				// (although this isn't thread safe, at all)
-
-				mQueue.erase(it);
-			}
-			else
-			{
-				// We're not moving it, leave it alone
-				return false;
-			}
-		}
-		else
-		{
-			// Doesn't exist, add it to the key set
-			mKeySet.insert(value);
-		}
-
-		mQueue.push_back(value);
-
-		// We succeeded in adding the new element.
-		return true;
-	}
-
-	bool push_front(const Type &value, bool move_if_there = false)
-	{
-		if (mKeySet.find(value) != mKeySet.end())
-		{
-			// Already on the queue
-			if (move_if_there)
-			{
-				// Remove the existing entry.
-				typename type_deque::iterator it;
-				for (it = mQueue.begin(); it != mQueue.end(); ++it)
-				{
-					if (*it == value)
-					{
-						break;
-					}
-				}
-
-				// This HAS to succeed, otherwise there's a serious bug in the keyset implementation
-				// (although this isn't thread safe, at all)
-
-				mQueue.erase(it);
-			}
-			else
-			{
-				// We're not moving it, leave it alone
-				return false;
-			}
-		}
-		else
-		{
-			// Doesn't exist, add it to the key set
-			mKeySet.insert(value);
-		}
-
-		mQueue.push_front(value);
-		return true;
-	}
-
-	void pop()
-	{
-		Type value = mQueue.front();
-		mKeySet.erase(value);
-		mQueue.pop_front();
-	}
-
-	Type &front()
-	{
-		return mQueue.front();
-	}
-
-	S32 size() const
-	{
-		return mQueue.size();
-	}
-
-	bool empty() const
-	{
-		return mQueue.empty();
-	}
-
-	void clear()
-	{
-		// Clear out all elements on the queue
-		mQueue.clear();
-		mKeySet.clear();
-	}
-};
-
-#endif // LL_LLINDEXEDQUEUE_H
diff --git a/indra/llcommon/lllazy.cpp b/indra/llcommon/lllazy.cpp
deleted file mode 100644
index 29fa040387..0000000000
--- a/indra/llcommon/lllazy.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file   lllazy.cpp
- * @author Nat Goodspeed
- * @date   2009-01-28
- * @brief  Implementation for lllazy.
- * 
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-// Precompiled header
-#include "linden_common.h"
-// associated header
-#include "lllazy.h"
-// STL headers
-// std headers
-// external library headers
-// other Linden headers
-
-// lllazy.h is presently header-only. This file exists only because our CMake
-// test macro ADD_BUILD_TEST requires it.
-int dummy = 0;
diff --git a/indra/llcommon/lllazy.h b/indra/llcommon/lllazy.h
deleted file mode 100644
index 5f3bbce79e..0000000000
--- a/indra/llcommon/lllazy.h
+++ /dev/null
@@ -1,399 +0,0 @@
-/**
- * @file   lllazy.h
- * @author Nat Goodspeed
- * @date   2009-01-22
- * @brief  Lazy instantiation of specified type. Useful in conjunction with
- *         Michael Feathers's "Extract and Override Getter" ("Working
- *         Effectively with Legacy Code", p. 352).
- *
- * Quoting his synopsis of steps on p.355:
- *
- * 1. Identify the object you need a getter for.
- * 2. Extract all of the logic needed to create the object into a getter.
- * 3. Replace all uses of the object with calls to the getter, and initialize
- *    the reference that holds the object to null in all constructors.
- * 4. Add the first-time logic to the getter so that the object is constructed
- *    and assigned to the reference whenever the reference is null.
- * 5. Subclass the class and override the getter to provide an alternative
- *    object for testing.
- *
- * It's the second half of bullet 3 (3b, as it were) that bothers me. I find
- * it all too easy to imagine adding pointer initializers to all but one
- * constructor... the one not exercised by my tests. That suggested using
- * (e.g.) boost::scoped_ptr<MyObject> so you don't have to worry about
- * destroying it either.
- *
- * However, introducing additional machinery allows us to encapsulate bullet 4
- * as well.
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#if ! defined(LL_LLLAZY_H)
-#define LL_LLLAZY_H
-
-#include <boost/function.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/lambda/construct.hpp>
-#include <stdexcept>
-
-/// LLLazyCommon simply factors out of LLLazy<T> things that don't depend on
-/// its template parameter.
-class LLLazyCommon
-{
-public:
-    /**
-     * This exception is thrown if you try to replace an LLLazy<T>'s factory
-     * (or T* instance) after it already has an instance in hand. Since T
-     * might well be stateful, we can't know the effect of silently discarding
-     * and replacing an existing instance, so we disallow it. This facility is
-     * intended for testing, and in a test scenario we can definitely control
-     * that.
-     */
-    struct InstanceChange: public std::runtime_error
-    {
-        InstanceChange(const std::string& what): std::runtime_error(what) {}
-    };
-
-protected:
-    /**
-     * InstanceChange might be appropriate in a couple of different LLLazy<T>
-     * methods. Factor out the common logic.
-     */
-    template <typename PTR>
-    static void ensureNoInstance(const PTR& ptr)
-    {
-        if (ptr)
-        {
-            // Too late: we've already instantiated the lazy object. We don't
-            // know whether it's stateful or not, so it's not safe to discard
-            // the existing instance in favor of a replacement.
-            throw InstanceChange("Too late to replace LLLazy instance");
-        }
-    }
-};
-
-/**
- * LLLazy<T> is useful when you have an outer class Outer that you're trying
- * to bring under unit test, that contains a data member difficult to
- * instantiate in a test harness. Typically the data member's class Inner has
- * many thorny dependencies. Feathers generally advocates "Extract and
- * Override Factory Method" (p. 350). But in C++, you can't call a derived
- * class override of a virtual method from the derived class constructor,
- * which limits applicability of "Extract and Override Factory Method." For
- * such cases Feathers presents "Extract and Override Getter" (p. 352).
- *
- * So we'll assume that your class Outer contains a member like this:
- * @code
- * Inner mInner;
- * @endcode
- *
- * LLLazy<Inner> can be used to replace this member. You can directly declare:
- * @code
- * LLLazy<Inner> mInner;
- * @endcode
- * and change references to mInner accordingly.
- *
- * (Alternatively, you can add a base class of the form
- * <tt>LLLazyBase<Inner></tt>. This is discussed further in the LLLazyBase<T>
- * documentation.)
- *
- * LLLazy<T> binds a <tt>boost::scoped_ptr<T></tt> and a factory functor
- * returning T*. You can either bind that functor explicitly or let it default
- * to the expression <tt>new T()</tt>.
- *
- * As long as LLLazy<T> remains unreferenced, its T remains uninstantiated.
- * The first time you use get(), <tt>operator*()</tt> or <tt>operator->()</tt>
- * it will instantiate its T and thereafter behave like a pointer to it.
- *
- * Thus, any existing reference to <tt>mInner.member</tt> should be replaced
- * with <tt>mInner->member</tt>. Any simple reference to @c mInner should be
- * replaced by <tt>*mInner</tt>.
- *
- * (If the original declaration was a pointer initialized in Outer's
- * constructor, e.g. <tt>Inner* mInner</tt>, so much the better. In that case
- * you should be able to drop in <tt>LLLazy<Inner></tt> without much change.)
- *
- * The support for "Extract and Override Getter" lies in the fact that you can
- * replace the factory functor -- or provide an explicit T*. Presumably this
- * is most useful from a test subclass -- which suggests that your @c mInner
- * member should be @c protected.
- *
- * Note that <tt>boost::lambda::new_ptr<T>()</tt> makes a dandy factory
- * functor, for either the set() method or LLLazy<T>'s constructor. If your T
- * requires constructor arguments, use an expression more like
- * <tt>boost::lambda::bind(boost::lambda::new_ptr<T>(), arg1, arg2, ...)</tt>.
- *
- * Of course the point of replacing the functor is to substitute a class that,
- * though referenced as Inner*, is not an Inner; presumably this is a testing
- * subclass of Inner (e.g. TestInner). Thus your test subclass TestOuter for
- * the containing class Outer will contain something like this:
- * @code
- * class TestOuter: public Outer
- * {
- * public:
- *     TestOuter()
- *     {
- *         // mInner must be 'protected' rather than 'private'
- *         mInner.set(boost::lambda::new_ptr<TestInner>());
- *     }
- *     ...
- * };
- * @endcode
- */
-template <typename T>
-class LLLazy: public LLLazyCommon
-{
-public:
-    /// Any nullary functor returning T* will work as a Factory
-    typedef boost::function<T* ()> Factory;
-
-    /// The default LLLazy constructor uses <tt>new T()</tt> as its Factory
-    LLLazy():
-        mFactory(boost::lambda::new_ptr<T>())
-    {}
-
-    /// Bind an explicit Factory functor
-    LLLazy(const Factory& factory):
-        mFactory(factory)
-    {}
-
-    /// Reference T, instantiating it if this is the first access
-    const T& get() const
-    {
-        if (! mInstance)
-        {
-            // use the bound Factory functor
-            mInstance.reset(mFactory());
-        }
-        return *mInstance;
-    }
-
-    /// non-const get()
-    T& get()
-    {
-        return const_cast<T&>(const_cast<const LLLazy<T>*>(this)->get());
-    }
-
-    /// operator*() is equivalent to get()
-    const T& operator*() const { return get(); }
-    /// operator*() is equivalent to get()
-    T& operator*() { return get(); }
-
-    /**
-     * operator->() must return (something resembling) T*. It's tempting to
-     * return the underlying boost::scoped_ptr<T>, but that would require
-     * breaking out the lazy-instantiation logic from get() into a common
-     * private method. Assume the pointer used for operator->() access is very
-     * short-lived.
-     */
-    const T* operator->() const { return &get(); }
-    /// non-const operator->()
-    T* operator->() { return &get(); }
-
-    /// set(Factory). This will throw InstanceChange if mInstance has already
-    /// been set.
-    void set(const Factory& factory)
-    {
-        ensureNoInstance(mInstance);
-        mFactory = factory;
-    }
-
-    /// set(T*). This will throw InstanceChange if mInstance has already been
-    /// set.
-    void set(T* instance)
-    {
-        ensureNoInstance(mInstance);
-        mInstance.reset(instance);
-    }
-
-private:
-    Factory mFactory;
-    // Consider an LLLazy<T> member of a class we're accessing by const
-    // reference. We want to allow even const methods to touch the LLLazy<T>
-    // member. Hence the actual pointer must be mutable because such access
-    // might assign it.
-    mutable boost::scoped_ptr<T> mInstance;
-};
-
-#if (! defined(__GNUC__)) || (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)
-// Not gcc at all, or a gcc more recent than gcc 3.3
-#define GCC33 0
-#else
-#define GCC33 1
-#endif
-
-/**
- * LLLazyBase<T> wraps LLLazy<T>, giving you an alternative way to replace
- * <tt>Inner mInner;</tt>. Instead of coding <tt>LLLazy<Inner> mInner</tt>,
- * you can add LLLazyBase<Inner> to your Outer class's bases, e.g.:
- * @code
- * class Outer: public LLLazyBase<Inner>
- * {
- *     ...
- * };
- * @endcode
- *
- * This gives you @c public get() and @c protected set() methods without
- * having to make your LLLazy<Inner> member @c protected. The tradeoff is that
- * you must access the wrapped LLLazy<Inner> using get() and set() rather than
- * with <tt>operator*()</tt> or <tt>operator->()</tt>.
- *
- * This mechanism can be used for more than one member, but only if they're of
- * different types. That is, you can replace:
- * @code
- * DifficultClass mDifficult;
- * AwkwardType    mAwkward;
- * @endcode
- * with:
- * @code
- * class Outer: public LLLazyBase<DifficultClass>, public LLLazyBase<AwkwardType>
- * {
- *     ...
- * };
- * @endcode
- * but for a situation like this:
- * @code
- * DifficultClass mMainDifficult, mAuxDifficult;
- * @endcode
- * you should directly embed LLLazy<DifficultClass> (q.v.).
- *
- * For multiple LLLazyBase bases, e.g. the <tt>LLLazyBase<DifficultClass>,
- * LLLazyBase<AwkwardType></tt> example above, access the relevant get()/set()
- * as (e.g.) <tt>LLLazyBase<DifficultClass>::get()</tt>. (This is why you
- * can't have multiple LLLazyBase<T> of the same T.) For a bit of syntactic
- * sugar, please see getLazy()/setLazy().
- */
-template <typename T>
-class LLLazyBase
-{
-public:
-    /// invoke default LLLazy constructor
-    LLLazyBase() {}
-    /// make wrapped LLLazy bind an explicit Factory
-    LLLazyBase(const typename LLLazy<T>::Factory& factory):
-        mInstance(factory)
-    {}
-
-    /// access to LLLazy::get()
-    T& get() { return *mInstance; }
-    /// access to LLLazy::get()
-    const T& get() const { return *mInstance; }
-
-protected:
-    // see getLazy()/setLazy()
-    #if (! GCC33)
-    template <typename T2, class MYCLASS> friend T2& getLazy(MYCLASS* this_);
-    template <typename T2, class MYCLASS> friend const T2& getLazy(const MYCLASS* this_);
-    #else // gcc 3.3
-    template <typename T2, class MYCLASS> friend T2& getLazy(const MYCLASS* this_);
-    #endif // gcc 3.3
-    template <typename T2, class MYCLASS> friend void setLazy(MYCLASS* this_, T2* instance);
-    template <typename T2, class MYCLASS>
-    friend void setLazy(MYCLASS* this_, const typename LLLazy<T2>::Factory& factory);
-
-    /// access to LLLazy::set(Factory)
-    void set(const typename LLLazy<T>::Factory& factory)
-    {
-        mInstance.set(factory);
-    }
-
-    /// access to LLLazy::set(T*)
-    void set(T* instance)
-    {
-        mInstance.set(instance);
-    }
-
-private:
-    LLLazy<T> mInstance;
-};
-
-/**
- * @name getLazy()/setLazy()
- * Suppose you have something like the following:
- * @code
- * class Outer: public LLLazyBase<DifficultClass>, public LLLazyBase<AwkwardType>
- * {
- *     ...
- * };
- * @endcode
- *
- * Your methods can reference the @c DifficultClass instance using
- * <tt>LLLazyBase<DifficultClass>::get()</tt>, which is admittedly a bit ugly.
- * Alternatively, you can write <tt>getLazy<DifficultClass>(this)</tt>, which
- * is somewhat more straightforward to read.
- *
- * Similarly,
- * @code
- * LLLazyBase<DifficultClass>::set(new TestDifficultClass());
- * @endcode
- * could instead be written:
- * @code
- * setLazy<DifficultClass>(this, new TestDifficultClass());
- * @endcode
- *
- * @note
- * I wanted to provide getLazy() and setLazy() without explicitly passing @c
- * this. That would imply making them methods on a base class rather than free
- * functions. But if <tt>LLLazyBase<T></tt> derives normally from (say) @c
- * LLLazyGrandBase providing those methods, then unqualified getLazy() would
- * be ambiguous: you'd have to write <tt>LLLazyBase<T>::getLazy<T>()</tt>,
- * which is even uglier than <tt>LLLazyBase<T>::get()</tt>, and therefore
- * pointless. You can make the compiler not care which @c LLLazyGrandBase
- * instance you're talking about by making @c LLLazyGrandBase a @c virtual
- * base class of @c LLLazyBase. But in that case,
- * <tt>LLLazyGrandBase::getLazy<T>()</tt> can't access
- * <tt>LLLazyBase<T>::get()</tt>!
- *
- * We want <tt>getLazy<T>()</tt> to access <tt>LLLazyBase<T>::get()</tt> as if
- * in the lexical context of some subclass method. Ironically, free functions
- * let us do that better than methods on a @c virtual base class -- but that
- * implies passing @c this explicitly. So be it.
- */
-//@{
-#if (! GCC33)
-template <typename T, class MYCLASS>
-T& getLazy(MYCLASS* this_) { return this_->LLLazyBase<T>::get(); }
-template <typename T, class MYCLASS>
-const T& getLazy(const MYCLASS* this_) { return this_->LLLazyBase<T>::get(); }
-#else // gcc 3.3
-// For const-correctness, we really should have two getLazy() variants: one
-// accepting const MYCLASS* and returning const T&, the other accepting
-// non-const MYCLASS* and returning non-const T&. This works fine on the Mac
-// (gcc 4.0.1) and Windows (MSVC 8.0), but fails on our Linux 32-bit Debian
-// Sarge stations (gcc 3.3.5). Since I really don't know how to beat that aging
-// compiler over the head to make it do the right thing, I'm going to have to
-// move forward with the wrong thing: a single getLazy() function that accepts
-// const MYCLASS* and returns non-const T&.
-template <typename T, class MYCLASS>
-T& getLazy(const MYCLASS* this_) { return const_cast<MYCLASS*>(this_)->LLLazyBase<T>::get(); }
-#endif // gcc 3.3
-template <typename T, class MYCLASS>
-void setLazy(MYCLASS* this_, T* instance) { this_->LLLazyBase<T>::set(instance); }
-template <typename T, class MYCLASS>
-void setLazy(MYCLASS* this_, const typename LLLazy<T>::Factory& factory)
-{
-    this_->LLLazyBase<T>::set(factory);
-}
-//@}
-
-#endif /* ! defined(LL_LLLAZY_H) */
diff --git a/indra/llcommon/lllocalidhashmap.h b/indra/llcommon/lllocalidhashmap.h
deleted file mode 100644
index 8f4f91a560..0000000000
--- a/indra/llcommon/lllocalidhashmap.h
+++ /dev/null
@@ -1,895 +0,0 @@
-/** 
- * @file lllocalidhashmap.h
- * @brief Map specialized for dealing with local ids
- *
- * $LicenseInfo:firstyear=2003&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLLOCALIDHASHMAP_H
-#define LL_LLLOCALIDHASHMAP_H
-
-#include "stdtypes.h"
-#include "llerror.h"
-
-const S32 MAX_ITERS = 4;
-// LocalID hash map
-
-//
-// LLLocalIDHashNode
-//
-
-template <class DATA, int SIZE>
-class LLLocalIDHashNode
-{
-public:
-	LLLocalIDHashNode();
-
-public:
-	S32 mCount;
-	U32	mKey[SIZE];
-	DATA mData[SIZE];
-	LLLocalIDHashNode<DATA, SIZE> *mNextNodep;
-};
-
-
-//
-// LLLocalIDHashNode implementation
-//
-template <class DATA, int SIZE>
-LLLocalIDHashNode<DATA, SIZE>::LLLocalIDHashNode()
-{
-	mCount = 0;
-	mNextNodep = NULL;
-}
-
-//
-// LLLocalIDHashMapIter
-//
-template <class DATA_TYPE, int SIZE>
-class LLLocalIDHashMap;
-
-template <class DATA_TYPE, int SIZE>
-class LLLocalIDHashMapIter
-{
-public:
-	LLLocalIDHashMapIter(LLLocalIDHashMap<DATA_TYPE, SIZE> *hash_mapp);
-	~LLLocalIDHashMapIter();
-
-	void setMap(LLLocalIDHashMap<DATA_TYPE, SIZE> *hash_mapp);
-	inline void first();
-	inline void next();
-	inline DATA_TYPE& current(); // *NOTE: Deprecate? Phoenix 2005-04-15
-	inline BOOL done() const;
-	inline S32  currentBin() const;
-	inline void setBin(S32 bin);
-
-	DATA_TYPE& operator*() const
-	{
-		return mCurHashNodep->mData[mCurHashNodeKey];
-	}
-	DATA_TYPE* operator->() const
-	{
-		return &(operator*());
-	}
-
-	LLLocalIDHashMap<DATA_TYPE, SIZE> *mHashMapp;
-	LLLocalIDHashNode<DATA_TYPE, SIZE> *mCurHashNodep;
-
-	S32 mCurHashMapNodeNum;
-	S32 mCurHashNodeKey;
-
-	DATA_TYPE mNull;
-
-	S32 mIterID;
-};
-
-
-
-template <class DATA_TYPE, int SIZE>
-class LLLocalIDHashMap
-{
-public:
-	friend class LLLocalIDHashMapIter<DATA_TYPE, SIZE>;
-
-	LLLocalIDHashMap(); // DO NOT use this unless you explicitly setNull, or the data type constructs a "null"
-						// object by default
-	// basic constructor including sorter
-	LLLocalIDHashMap(const DATA_TYPE &null_data);
-	// Hack, this should really be a const ref, but I'm not doing it that way because the sim
-	// usually uses pointers.
-	~LLLocalIDHashMap();
-
-	inline DATA_TYPE &get(const U32 local_id);
-	inline BOOL check(const U32 local_id) const;
-	inline DATA_TYPE &set(const U32 local_id, const DATA_TYPE data);
-	inline BOOL remove(const U32 local_id);
-	void removeAll();
-
-	void setNull(const DATA_TYPE data) { mNull = data; }
-
-	inline S32 getLength() const; // Warning, NOT O(1!)
-
-	void dumpIter();
-	void dumpBin(U32 bin);
-
-protected:
-	// Only used by the iterator.
-	void addIter(LLLocalIDHashMapIter<DATA_TYPE, SIZE> *iter);
-	void removeIter(LLLocalIDHashMapIter<DATA_TYPE, SIZE> *iter);
-
-	// Remove the item and shift all items afterward down the list,
-	// fixing up iterators as we go.
-	BOOL removeWithShift(const U32 local_id);
-
-protected:
-	LLLocalIDHashNode<DATA_TYPE, SIZE> mNodes[256];
-
-	S32 mIterCount;
-	LLLocalIDHashMapIter<DATA_TYPE, SIZE> *mIters[MAX_ITERS];
-
-	DATA_TYPE mNull;
-};
-
-
-//
-// LLLocalIDHashMap implementation
-//
-
-template <class DATA_TYPE, int SIZE>
-LLLocalIDHashMap<DATA_TYPE, SIZE>::LLLocalIDHashMap()
-:	mIterCount(0),
-	mNull()
-{
-	S32 i;
-	for (i = 0; i < MAX_ITERS; i++)
-	{
-		mIters[i] = NULL;
-	}
-}
-
-template <class DATA_TYPE, int SIZE>
-LLLocalIDHashMap<DATA_TYPE, SIZE>::LLLocalIDHashMap(const DATA_TYPE &null_data)
-:	mIterCount(0),
-	mNull(null_data)
-{
-	S32 i;
-	for (i = 0; i < MAX_ITERS; i++)
-	{
-		mIters[i] = NULL;
-	}
-}
-
-template <class DATA_TYPE, int SIZE>
-LLLocalIDHashMap<DATA_TYPE, SIZE>::~LLLocalIDHashMap()
-{
-	S32 i;
-	for (i = 0; i < MAX_ITERS; i++)
-	{
-		if (mIters[i])
-		{
-			mIters[i]->mHashMapp = NULL;
-			mIterCount--;
-		}
-	}
-	removeAll();
-}
-
-template <class DATA_TYPE, int SIZE>
-void LLLocalIDHashMap<DATA_TYPE, SIZE>::removeAll()
-{
-	S32 bin;
-	for (bin = 0; bin < 256; bin++)
-	{
-		LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[bin];
-
-		BOOL first = TRUE;
-		do // First node guaranteed to be there
-		{
-			S32 i;
-			const S32 count = nodep->mCount;
-
-			// Iterate through all members of this node
-			for (i = 0; i < count; i++)
-			{
-				nodep->mData[i] = mNull;
-			}
-
-			nodep->mCount = 0;
-			// Done with all objects in this node, go to the next.
-
-			LLLocalIDHashNode<DATA_TYPE, SIZE>* curp = nodep;
-			nodep = nodep->mNextNodep;
-
-			// Delete the node if it's not the first node
-			if (first)
-			{
-				first = FALSE;
-				curp->mNextNodep = NULL;
-			}
-			else
-			{
-				delete curp;
-			}
-		} while (nodep);
-	}
-}
-
-template <class DATA_TYPE, int SIZE>
-void LLLocalIDHashMap<DATA_TYPE, SIZE>::dumpIter()
-{
-	std::cout << "Hash map with " << mIterCount << " iterators" << std::endl;
-
-	std::cout << "Hash Map Iterators:" << std::endl;
-	S32 i;
-	for (i = 0; i < MAX_ITERS; i++)
-	{
-		if (mIters[i])
-		{
-			llinfos << i << " " << mIters[i]->mCurHashNodep << " " << mIters[i]->mCurHashNodeKey << llendl;
-		}
-		else
-		{
-			llinfos << i << "null" << llendl;
-		}
-	}
-}
-
-template <class DATA_TYPE, int SIZE>
-void LLLocalIDHashMap<DATA_TYPE, SIZE>::dumpBin(U32 bin)
-{
-	std::cout << "Dump bin " << bin << std::endl;
-
-	LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[bin];
-	S32 node = 0;
-	do // First node guaranteed to be there.
-	{
-		std::cout << "Bin " << bin 
-			<< " node " << node
-			<< " count " << nodep->mCount
-			<< " contains " << std::flush;
-
-		S32 i;
-		for (i = 0; i < nodep->mCount; i++)
-		{
-			std::cout << nodep->mData[i] << " " << std::flush;
-		}
-
-		std::cout << std::endl;
-
-		nodep = nodep->mNextNodep;
-		node++;
-	} while (nodep);
-}
-
-template <class DATA_TYPE, int SIZE>
-inline S32 LLLocalIDHashMap<DATA_TYPE, SIZE>::getLength() const
-{
-	S32 count = 0;
-	S32 bin;
-	for (bin = 0; bin < 256; bin++)
-	{
-		const LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[bin];
-		while (nodep)
-		{
-			count += nodep->mCount;
-			nodep = nodep->mNextNodep;
-		}
-	}
-	return count;
-}
-
-template <class DATA_TYPE, int SIZE>
-inline DATA_TYPE &LLLocalIDHashMap<DATA_TYPE, SIZE>::get(const U32 local_id)
-{
-	LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[local_id & 0xff];
-
-	do // First node guaranteed to be there
-	{
-		S32 i;
-		const S32 count = nodep->mCount;
-
-		// Iterate through all members of this node
-		for (i = 0; i < count; i++)
-		{
-			if (nodep->mKey[i] == local_id)
-			{
-				// We found it.
-				return nodep->mData[i];
-			}
-		}
-
-		// Done with all objects in this node, go to the next.
-		nodep = nodep->mNextNodep;
-	} while (nodep);
-
-	return mNull;
-}
-
-
-template <class DATA_TYPE, int SIZE>
-inline BOOL LLLocalIDHashMap<DATA_TYPE, SIZE>::check(const U32 local_id) const
-{
-	const LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[local_id & 0xff];
-
-	do // First node guaranteed to be there
-	{
-		S32 i;
-		const S32 count = nodep->mCount;
-
-		// Iterate through all members of this node
-		for (i = 0; i < count; i++)
-		{
-			if (nodep->mKey[i] == local_id)
-			{
-				// We found it.
-				return TRUE;
-			}
-		}
-
-		// Done with all objects in this node, go to the next.
-		nodep = nodep->mNextNodep;
-	} while (nodep);
-
-	// Didn't find anything
-	return FALSE;
-}
-
-
-template <class DATA_TYPE, int SIZE>
-inline DATA_TYPE &LLLocalIDHashMap<DATA_TYPE, SIZE>::set(const U32 local_id, const DATA_TYPE data)
-{
-	// Set is just like a normal find, except that if we find a match
-	// we replace it with the input value.
-	// If we don't find a match, we append to the end of the list.
-
-	LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[local_id & 0xff];
-
-	while (1)
-	{
-		const S32 count = nodep->mCount;
-
-		S32 i;
-		for (i = 0; i < count; i++)
-		{
-			if (nodep->mKey[i] == local_id)
-			{
-				// We found a match for this key, replace the data with
-				// the incoming data.
-				nodep->mData[i] = data;
-				return nodep->mData[i];
-			}
-		}
-		if (!nodep->mNextNodep)
-		{
-			// We've iterated through all of the keys without finding a match
-			if (i < SIZE)
-			{
-				// There's still some space on this node, append
-				// the key and data to it.
-				nodep->mKey[i] = local_id;
-				nodep->mData[i] = data;
-				nodep->mCount++;
-
-				return nodep->mData[i];
-			}
-			else
-			{
-				// This node is full, append a new node to the end.
-				nodep->mNextNodep = new LLLocalIDHashNode<DATA_TYPE, SIZE>;
-				nodep->mNextNodep->mKey[0] = local_id;
-				nodep->mNextNodep->mData[0] = data;
-				nodep->mNextNodep->mCount = 1;
-
-				return nodep->mNextNodep->mData[0];
-			}
-		}
-
-		// No match on this node, go to the next
-		nodep = nodep->mNextNodep;
-	}
-}
-
-
-template <class DATA_TYPE, int SIZE>
-inline BOOL LLLocalIDHashMap<DATA_TYPE, SIZE>::remove(const U32 local_id)
-{
-	// Remove is the trickiest operation.
-	// What we want to do is swap the last element of the last
-	// node if we find the one that we want to remove, but we have
-	// to deal with deleting the node from the tail if it's empty, but
-	// NOT if it's the only node left.
-
-	const S32 node_index = local_id & 0xff;
-
-	LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[node_index];
-
-	// A modification of the standard search algorithm.
-	do // First node guaranteed to be there
-	{
-		const S32 count = nodep->mCount;
-
-		S32 i;
-		for (i = 0; i < count; i++)
-		{
-			if (nodep->mKey[i] == local_id)
-			{
-				// If we're removing the item currently pointed to by one
-				// or more iterators, we can just swap in the last item
-				// and back the iterator(s) up by one.
-				// Otherwise, we need to do a slow and safe shift of all
-				// items back to one position to fill the hole and fix up 
-				// all iterators we find.
-				BOOL need_shift = FALSE;
-				S32 cur_iter;
-				if (mIterCount)
-				{
-					for (cur_iter = 0; cur_iter < MAX_ITERS; cur_iter++)
-					{
-						if (mIters[cur_iter])
-						{
-							// We only care if the hash map node is on the one
-							// that we're working on.  If it's before, we've already
-							// traversed it, if it's after, changing the order doesn't
-							// matter.
-							if (mIters[cur_iter]->mCurHashMapNodeNum == node_index)
-							{
-								if ((mIters[cur_iter]->mCurHashNodep == nodep)
-									&& (mIters[cur_iter]->mCurHashNodeKey == i))
-								{
-									// it's on the one we're deleting, we'll
-									// fix the iterator quickly below.
-								}
-								else
-								{
-									// We're trying to remove an item on this
-									// iterator's chain that this
-									// iterator doesn't point to!  We need to do
-									// the slow remove-and-shift-down case.
-									need_shift = TRUE;
-								}
-							}
-						}
-					}
-				}
-
-				// Removing an item that isn't pointed to by all iterators
-				if (need_shift)
-				{
-					return removeWithShift(local_id);
-				}
-
-				// Fix the iterators that point to this node/i pair, the
-				// one we're deleting
-				for (cur_iter = 0; cur_iter < MAX_ITERS; cur_iter++)
-				{
-					if (mIters[cur_iter])
-					{
-						// We only care if the hash map node is on the one
-						// that we're working on.  If it's before, we've already
-						// traversed it, if it's after, changing the order doesn't
-						// matter.
-						if (mIters[cur_iter]->mCurHashMapNodeNum == node_index)
-						{
-							if ((mIters[cur_iter]->mCurHashNodep == nodep)
-								&& (mIters[cur_iter]->mCurHashNodeKey == i))
-							{
-								// We can handle the case where we're deleting 
-								// the element we're on trivially (sort of).
-								if (nodep->mCount > 1)
-								{
-									// If we're not going to delete this node,
-									// it's OK.
-									mIters[cur_iter]->mCurHashNodeKey--;
-								}
-								else
-								{
-									// We're going to delete this node, because this
-									// is the last element on it.
-									
-									// Find the next node, and then back up one.
-									mIters[cur_iter]->next();
-									mIters[cur_iter]->mCurHashNodeKey--;
-								}
-							}
-						}
-					}
-				}
-
-				// We found the node that we want to remove.
-				// Find the last (and next-to-last) node, and the index of the last
-				// element.  We could conceviably start from the node we're on,
-				// but that makes it more complicated, this is easier.
-
-				LLLocalIDHashNode<DATA_TYPE, SIZE> *prevp = &mNodes[node_index];
-				LLLocalIDHashNode<DATA_TYPE, SIZE> *lastp = prevp;
-
-				// Find the last and next-to-last
-				while (lastp->mNextNodep)
-				{
-					prevp = lastp;
-					lastp = lastp->mNextNodep;
-				}
-
-				// First, swap in the last to the current location.
-				nodep->mKey[i] = lastp->mKey[lastp->mCount - 1];
-				nodep->mData[i] = lastp->mData[lastp->mCount - 1];
-
-				// Now, we delete the entry
-				lastp->mCount--;
-				lastp->mData[lastp->mCount] = mNull;
-
-				if (!lastp->mCount)
-				{
-					// We deleted the last element!
-					if (lastp != &mNodes[local_id & 0xff])
-					{
-						// Only blitz the node if it's not the head
-						// Set the previous node to point to NULL, then
-						// blitz the empty last node
-						prevp->mNextNodep = NULL;
-						delete lastp;
-					}
-				}
-
-				return TRUE;
-			}
-		}
-
-		// Iterate to the next node, we've scanned all the entries in this one.
-		nodep = nodep->mNextNodep;
-	} while (nodep);
-
-	return FALSE;
-}
-
-template <class DATA_TYPE, int SIZE>
-BOOL LLLocalIDHashMap<DATA_TYPE, SIZE>::removeWithShift(const U32 local_id)
-{
-	const S32 node_index = local_id & 0xFF;
-	LLLocalIDHashNode<DATA_TYPE, SIZE>* nodep = &mNodes[node_index];
-	LLLocalIDHashNode<DATA_TYPE, SIZE>* prevp = NULL;
-	BOOL found = FALSE;
-
-	do // First node guaranteed to be there
-	{
-		const S32 count = nodep->mCount;
-		S32 i;
-		for (i = 0; i < count; i++)
-		{
-			if (nodep->mKey[i] == local_id)
-			{
-				// Found the item.  Start shifting items from later
-				// in the list over this item.
-				found = TRUE;
-			}
-
-			if (found)
-			{
-				// If there is an iterator on this node, we need to 
-				// back it up.
-				S32 cur_iter;
-				for (cur_iter = 0; cur_iter <MAX_ITERS; cur_iter++)
-				{
-					LLLocalIDHashMapIter<DATA_TYPE, SIZE>* iter;
-					iter = mIters[cur_iter];
-					// If an iterator is on this node,i pair, then back it up.
-					if (iter
-						&& iter->mCurHashMapNodeNum == node_index
-						&& iter->mCurHashNodep == nodep
-						&& iter->mCurHashNodeKey == i)
-					{
-						if (i > 0)
-						{
-							// Don't need to move iterator nodep, since 
-							// we're in the same node.
-							iter->mCurHashNodeKey--;
-						}
-						else if (prevp)
-						{
-							// need to go the previous node, last item
-							iter->mCurHashNodep = prevp;
-							iter->mCurHashNodeKey = prevp->mCount - 1;
-						}
-						else
-						{
-							// we're on the first item in the list, but
-							// need to go back anyhow.
-
-							// BUG: If this deletion empties the list, 
-							// iter->done() will be wrong until
-							// iter->next() is called.
-							iter->mCurHashNodeKey = -1;
-						}
-					}
-				}
-
-				// Copy data from the next position into this position.
-				if (i < count-1)
-				{
-					// we're not on the last item in the node,
-					// so we can copy within the node
-					nodep->mKey[i] = nodep->mKey[i+1];
-					nodep->mData[i] = nodep->mData[i+1];
-				}
-				else if (nodep->mNextNodep)
-				{
-					// we're on the last item in the node,
-					// but there's a next node we can copy from
-					nodep->mKey[i] = nodep->mNextNodep->mKey[0];
-					nodep->mData[i] = nodep->mNextNodep->mData[0];
-				}
-				else
-				{
-					// We're on the last position in the list.
-					// No one to copy from.  Replace with nothing.
-					nodep->mKey[i] = 0;
-					nodep->mData[i] = mNull;
-				}
-			}
-		}
-
-		// Last node in chain, so delete the last node
-		if (found
-			&& !nodep->mNextNodep)
-		{
-			// delete the last item off the last node
-			nodep->mCount--;
-
-			if (nodep->mCount == 0)
-			{
-				// We deleted the last element!
-				if (nodep != &mNodes[node_index])
-				{
-					// Always have a prevp if we're not the head.
-					llassert(prevp);
-
-					// Only blitz the node if it's not the head
-					// Set the previous node to point to NULL, then
-					// blitz the empty last node
-					prevp->mNextNodep = NULL;
-					delete nodep;
-					nodep = NULL;
-				}
-			}
-
-			// Deleted last item in chain, so we're done.
-			return found;
-		}
-
-		prevp = nodep;
-		nodep = nodep->mNextNodep;
-	} while (nodep);
-
-	return found;
-}
-
-template <class DATA_TYPE, int SIZE>
-void LLLocalIDHashMap<DATA_TYPE, SIZE>::removeIter(LLLocalIDHashMapIter<DATA_TYPE, SIZE> *iter)
-{
-	S32 i;
-	for (i = 0; i < MAX_ITERS; i++)
-	{
-		if (mIters[i] == iter)
-		{
-			mIters[i] = NULL;
-			mIterCount--;
-			return;
-		}
-	}
-	llerrs << "Iterator " << iter << " not found for removal in hash map!" << llendl;
-}
-
-template <class DATA_TYPE, int SIZE>
-void LLLocalIDHashMap<DATA_TYPE, SIZE>::addIter(LLLocalIDHashMapIter<DATA_TYPE, SIZE> *iter)
-{
-	S32 i;
-	for (i = 0; i < MAX_ITERS; i++)
-	{
-		if (mIters[i] == NULL)
-		{
-			mIters[i] = iter;
-			mIterCount++;
-			return;
-		}
-	}
-	llerrs << "More than " << MAX_ITERS << " iterating over a map simultaneously!" << llendl;
-}
-
-
-
-//
-// LLLocalIDHashMapIter Implementation
-//
-template <class DATA_TYPE, int SIZE>
-LLLocalIDHashMapIter<DATA_TYPE, SIZE>::LLLocalIDHashMapIter(LLLocalIDHashMap<DATA_TYPE, SIZE> *hash_mapp)
-{
-	mHashMapp = NULL;
-	setMap(hash_mapp);
-}
-
-template <class DATA_TYPE, int SIZE>
-LLLocalIDHashMapIter<DATA_TYPE, SIZE>::~LLLocalIDHashMapIter()
-{
-	if (mHashMapp)
-	{
-		mHashMapp->removeIter(this);
-	}
-}
-
-template <class DATA_TYPE, int SIZE>
-void LLLocalIDHashMapIter<DATA_TYPE, SIZE>::setMap(LLLocalIDHashMap<DATA_TYPE, SIZE> *hash_mapp)
-{
-	if (mHashMapp)
-	{
-		mHashMapp->removeIter(this);
-	}
-	mHashMapp = hash_mapp;
-	if (mHashMapp)
-	{
-		mHashMapp->addIter(this);
-	}
-
-	mCurHashNodep = NULL;
-	mCurHashMapNodeNum = -1;
-	mCurHashNodeKey = 0;
-}
-
-template <class DATA_TYPE, int SIZE>
-inline void LLLocalIDHashMapIter<DATA_TYPE, SIZE>::first()
-{
-	// Iterate through until we find the first non-empty node;
-	S32 i;
-	for (i = 0; i < 256; i++)
-	{
-		if (mHashMapp->mNodes[i].mCount)
-		{
-
-			mCurHashNodep = &mHashMapp->mNodes[i];
-			mCurHashMapNodeNum = i;
-			mCurHashNodeKey = 0;
-			//return mCurHashNodep->mData[0];
-			return;
-		}
-	}
-
-	// Completely empty!
-	mCurHashNodep = NULL;
-	//return mNull;
-	return;
-}
-
-template <class DATA_TYPE, int SIZE>
-inline BOOL LLLocalIDHashMapIter<DATA_TYPE, SIZE>::done() const
-{
-	return mCurHashNodep ? FALSE : TRUE;
-}
-
-template <class DATA_TYPE, int SIZE>
-inline S32 LLLocalIDHashMapIter<DATA_TYPE, SIZE>::currentBin() const
-{
-	if (  (mCurHashMapNodeNum > 255)
-		||(mCurHashMapNodeNum < 0))
-	{
-		return 0;
-	}
-	else
-	{
-		return mCurHashMapNodeNum;
-	}
-}
-
-template <class DATA_TYPE, int SIZE>
-inline void LLLocalIDHashMapIter<DATA_TYPE, SIZE>::setBin(S32 bin)
-{
-	// Iterate through until we find the first non-empty node;
-	S32 i;
-	bin = llclamp(bin, 0, 255);
-	for (i = bin; i < 256; i++)
-	{
-		if (mHashMapp->mNodes[i].mCount)
-		{
-
-			mCurHashNodep = &mHashMapp->mNodes[i];
-			mCurHashMapNodeNum = i;
-			mCurHashNodeKey = 0;
-			return;
-		}
-	}
-	for (i = 0; i < bin; i++)
-	{
-		if (mHashMapp->mNodes[i].mCount)
-		{
-
-			mCurHashNodep = &mHashMapp->mNodes[i];
-			mCurHashMapNodeNum = i;
-			mCurHashNodeKey = 0;
-			return;
-		}
-	}
-	// Completely empty!
-	mCurHashNodep = NULL;
-}
-
-template <class DATA_TYPE, int SIZE>
-inline DATA_TYPE &LLLocalIDHashMapIter<DATA_TYPE, SIZE>::current()
-{
-	if (!mCurHashNodep)
-	{
-		return mNull;
-	}
-	return mCurHashNodep->mData[mCurHashNodeKey];
-}
-
-template <class DATA_TYPE, int SIZE>
-inline void LLLocalIDHashMapIter<DATA_TYPE, SIZE>::next()
-{
-	// No current entry, this iterator is done
-	if (!mCurHashNodep)
-	{
-		//return mNull;
-		return;
-	}
-
-	// Go to the next element
-	mCurHashNodeKey++;
-	if (mCurHashNodeKey < mCurHashNodep->mCount)
-	{
-		// We're not done with this node, return the current element
-		//return mCurHashNodep->mData[mCurHashNodeKey];
-		return;
-	}
-
-	// Done with this node, move to the next
-	mCurHashNodep = mCurHashNodep->mNextNodep;
-	if (mCurHashNodep)
-	{
-		// Return the first element
-		mCurHashNodeKey = 0;
-		//return mCurHashNodep->mData[0];
-		return;
-	}
-
-	// Find the next non-empty node (keyed on the first byte)
-	mCurHashMapNodeNum++;
-
-	S32 i;
-	for (i = mCurHashMapNodeNum; i < 256; i++)
-	{
-		if (mHashMapp->mNodes[i].mCount)
-		{
-			// We found one that wasn't empty
-			mCurHashNodep = &mHashMapp->mNodes[i];
-			mCurHashMapNodeNum = i;
-			mCurHashNodeKey = 0;
-			//return mCurHashNodep->mData[0];
-			return;
-		}
-	}
-
-	// OK, we're done, nothing else to iterate
-	mCurHashNodep = NULL;
-	mHashMapp->mIterCount--; // Decrement since we're safe to do removes now
-	//return mNull;
-	return;
-}
-
-#endif // LL_LLLOCALIDHASHMAP_H
diff --git a/indra/llcommon/llregistry.h b/indra/llcommon/llregistry.h
index 853c427a13..9bb66d13dd 100644
--- a/indra/llcommon/llregistry.h
+++ b/indra/llcommon/llregistry.h
@@ -29,7 +29,6 @@
 
 #include <list>
 
-#include <boost/type_traits.hpp>
 #include "llsingleton.h"
 #include "llstl.h"
 
@@ -47,12 +46,11 @@ template <typename KEY, typename VALUE, typename COMPARATOR = LLRegistryDefaultC
 class LLRegistry
 {
 public:
-	typedef LLRegistry<KEY, VALUE, COMPARATOR>											registry_t;
-	typedef typename boost::add_reference<typename boost::add_const<KEY>::type>::type	ref_const_key_t;
-	typedef typename boost::add_reference<typename boost::add_const<VALUE>::type>::type	ref_const_value_t;
-	typedef typename boost::add_reference<VALUE>::type									ref_value_t;
-	typedef typename boost::add_pointer<typename boost::add_const<VALUE>::type>::type	ptr_const_value_t;
-	typedef typename boost::add_pointer<VALUE>::type									ptr_value_t;
+	typedef LLRegistry<KEY, VALUE, COMPARATOR>		registry_t;
+	typedef const KEY& 								ref_const_key_t;
+	typedef const VALUE&							ref_const_value_t;
+	typedef const VALUE*							ptr_const_value_t;
+	typedef VALUE*									ptr_value_t;
 
 	class Registrar
 	{
diff --git a/indra/llcommon/llsortedvector.h b/indra/llcommon/llsortedvector.h
deleted file mode 100644
index 391b82ee44..0000000000
--- a/indra/llcommon/llsortedvector.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * @file   llsortedvector.h
- * @author Nat Goodspeed
- * @date   2012-04-08
- * @brief  LLSortedVector class wraps a vector that we maintain in sorted
- *         order so we can perform binary-search lookups.
- * 
- * $LicenseInfo:firstyear=2012&license=viewerlgpl$
- * Copyright (c) 2012, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-#if ! defined(LL_LLSORTEDVECTOR_H)
-#define LL_LLSORTEDVECTOR_H
-
-#include <vector>
-#include <algorithm>
-
-/**
- * LLSortedVector contains a std::vector<std::pair> that we keep sorted on the
- * first of the pair. This makes insertion somewhat more expensive than simple
- * std::vector::push_back(), but allows us to use binary search for lookups.
- * It's intended for small aggregates where lookup is far more performance-
- * critical than insertion; in such cases a binary search on a small, sorted
- * std::vector can be more performant than a std::map lookup.
- */
-template <typename KEY, typename VALUE>
-class LLSortedVector
-{
-public:
-    typedef LLSortedVector<KEY, VALUE> self;
-    typedef KEY key_type;
-    typedef VALUE mapped_type;
-    typedef std::pair<key_type, mapped_type> value_type;
-    typedef std::vector<value_type> PairVector;
-    typedef typename PairVector::iterator iterator;
-    typedef typename PairVector::const_iterator const_iterator;
-
-    /// Empty
-    LLSortedVector() {}
-
-    /// Fixed initial size
-    LLSortedVector(std::size_t size):
-        mVector(size)
-    {}
-
-    /// Bulk load
-    template <typename ITER>
-    LLSortedVector(ITER begin, ITER end):
-        mVector(begin, end)
-    {
-        // Allow caller to dump in a bunch of (pairs convertible to)
-        // value_type if desired, but make sure we sort afterwards.
-        std::sort(mVector.begin(), mVector.end());
-    }
-
-    /// insert(key, value)
-    std::pair<iterator, bool> insert(const key_type& key, const mapped_type& value)
-    {
-        return insert(value_type(key, value));
-    }
-
-    /// insert(value_type)
-    std::pair<iterator, bool> insert(const value_type& pair)
-    {
-        typedef std::pair<iterator, bool> iterbool;
-        iterator found = std::lower_bound(mVector.begin(), mVector.end(), pair,
-                                          less<value_type>());
-        // have to check for end() before it's even valid to dereference
-        if (found == mVector.end())
-        {
-            std::size_t index(mVector.size());
-            mVector.push_back(pair);
-            // don't forget that push_back() invalidates 'found'
-            return iterbool(mVector.begin() + index, true);
-        }
-        if (found->first == pair.first)
-        {
-            return iterbool(found, false);
-        }
-        // remember that insert() invalidates 'found' -- save index
-        std::size_t index(found - mVector.begin());
-        mVector.insert(found, pair);
-        // okay, convert from index back to iterator
-        return iterbool(mVector.begin() + index, true);
-    }
-
-    iterator begin() { return mVector.begin(); }
-    iterator end()   { return mVector.end(); }
-    const_iterator begin() const { return mVector.begin(); }
-    const_iterator end()   const { return mVector.end(); }
-
-    bool empty() const { return mVector.empty(); }
-    std::size_t size() const { return mVector.size(); }
-
-    /// find
-    iterator find(const key_type& key)
-    {
-        iterator found = std::lower_bound(mVector.begin(), mVector.end(),
-                                          value_type(key, mapped_type()),
-                                          less<value_type>());
-        if (found == mVector.end() || found->first != key)
-            return mVector.end();
-        return found;
-    }
-
-    const_iterator find(const key_type& key) const
-    {
-        return const_cast<self*>(this)->find(key);
-    }
-
-private:
-    // Define our own 'less' comparator so we can specialize without messing
-    // with std::less.
-    template <typename T>
-    struct less: public std::less<T> {};
-
-    // Specialize 'less' for an LLSortedVector::value_type involving
-    // std::type_info*. This is one of LLSortedVector's foremost use cases. We
-    // specialize 'less' rather than just defining a specific comparator
-    // because LLSortedVector should be usable for other key_types as well.
-    template <typename T>
-    struct less< std::pair<std::type_info*, T> >:
-        public std::binary_function<std::pair<std::type_info*, T>,
-                                    std::pair<std::type_info*, T>,
-                                    bool>
-    {
-        bool operator()(const std::pair<std::type_info*, T>& lhs,
-                        const std::pair<std::type_info*, T>& rhs) const
-        {
-            return lhs.first->before(*rhs.first);
-        }
-    };
-
-    // Same as above, but with const std::type_info*.
-    template <typename T>
-    struct less< std::pair<const std::type_info*, T> >:
-        public std::binary_function<std::pair<const std::type_info*, T>,
-                                    std::pair<const std::type_info*, T>,
-                                    bool>
-    {
-        bool operator()(const std::pair<const std::type_info*, T>& lhs,
-                        const std::pair<const std::type_info*, T>& rhs) const
-        {
-            return lhs.first->before(*rhs.first);
-        }
-    };
-
-    PairVector mVector;
-};
-
-#endif /* ! defined(LL_LLSORTEDVECTOR_H) */
diff --git a/indra/llcommon/llstack.h b/indra/llcommon/llstack.h
deleted file mode 100644
index 315de6ba2d..0000000000
--- a/indra/llcommon/llstack.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/** 
- * @file llstack.h
- * @brief LLStack template class
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLSTACK_H
-#define LL_LLSTACK_H
-
-#include "linked_lists.h"
-
-template <class DATA_TYPE> class LLStack
-{
-private:
-	LLLinkedList<DATA_TYPE> mStack;
-
-public:
-	LLStack()	{}
-	~LLStack()	{}
-
-	void push(DATA_TYPE *data)	{ mStack.addData(data); }
-	DATA_TYPE *pop()			{ DATA_TYPE *tempp = mStack.getFirstData(); mStack.removeCurrentData(); return tempp; }
-	void deleteAllData()		{ mStack.deleteAllData(); }
-	void removeAllNodes()		{ mStack.removeAllNodes(); }
-};
-
-#endif
-
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 92323f5fda..f499beca80 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -91,15 +91,15 @@ private:
 	BOOL				mPaused;
 	
 	// static function passed to APR thread creation routine
-	static void *APR_THREAD_FUNC staticRun(apr_thread_t *apr_threadp, void *datap);
+	static void *APR_THREAD_FUNC staticRun(struct apr_thread_t *apr_threadp, void *datap);
 
 protected:
 	std::string			mName;
 	class LLCondition*	mRunCondition;
 	LLMutex*			mDataLock;
 
-	apr_thread_t		*mAPRThreadp;
-	apr_pool_t			*mAPRPoolp;
+	apr_thread_t*		mAPRThreadp;
+	apr_pool_t*			mAPRPoolp;
 	BOOL				mIsLocalPool;
 	EThreadStatus		mStatus;
 	U32					mID;
@@ -107,7 +107,7 @@ protected:
 	//a local apr_pool for APRFile operations in this thread. If it exists, LLAPRFile::sAPRFilePoolp should not be used.
 	//Note: this pool is used by APRFile ONLY, do NOT use it for any other purposes.
 	//      otherwise it will cause severe memory leaking!!! --bao
-	LLVolatileAPRPool  *mLocalAPRFilePoolp ; 
+	LLVolatileAPRPool*	mLocalAPRFilePoolp ; 
 
 	void setQuitting();
 	
diff --git a/indra/llcommon/lltypeinfolookup.h b/indra/llcommon/lltypeinfolookup.h
deleted file mode 100644
index 0b6862444e..0000000000
--- a/indra/llcommon/lltypeinfolookup.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * @file   lltypeinfolookup.h
- * @author Nat Goodspeed
- * @date   2012-04-08
- * @brief  Template data structure like std::map<std::type_info*, T>
- * 
- * $LicenseInfo:firstyear=2012&license=viewerlgpl$
- * Copyright (c) 2012, Linden Research, Inc.
- * $/LicenseInfo$
- */
-
-#if ! defined(LL_LLTYPEINFOLOOKUP_H)
-#define LL_LLTYPEINFOLOOKUP_H
-
-#include <boost/unordered_map.hpp>
-#include <boost/functional/hash.hpp>
-#include <boost/optional.hpp>
-#include <functional>               // std::binary_function
-#include <typeinfo>
-
-/**
- * The following helper classes are based on the Boost.Unordered documentation:
- * http://www.boost.org/doc/libs/1_45_0/doc/html/unordered/hash_equality.html
- */
-
-/**
- * Compute hash for a string passed as const char*
- */
-struct const_char_star_hash: public std::unary_function<const char*, std::size_t>
-{
-    std::size_t operator()(const char* str) const
-    {
-        std::size_t seed = 0;
-        for ( ; *str; ++str)
-        {
-            boost::hash_combine(seed, *str);
-        }
-        return seed;
-    }
-};
-
-/**
- * Compute equality for strings passed as const char*
- *
- * I (nat) suspect that this is where the default behavior breaks for the
- * const char* values returned from std::type_info::name(). If you compare the
- * two const char* pointer values, as a naive, unspecialized implementation
- * will surely do, they'll compare unequal.
- */
-struct const_char_star_equal: public std::binary_function<const char*, const char*, bool>
-{
-    bool operator()(const char* lhs, const char* rhs) const
-    {
-        return strcmp(lhs, rhs) == 0;
-    }
-};
-
-/**
- * LLTypeInfoLookup is specifically designed for use cases for which you might
- * consider std::map<std::type_info*, VALUE>. We have several such data
- * structures in the viewer. The trouble with them is that at least on Linux,
- * you can't rely on always getting the same std::type_info* for a given type:
- * different load modules will produce different std::type_info*.
- * LLTypeInfoLookup contains a workaround to address this issue.
- *
- * The API deliberately diverges from std::map in several respects:
- * * It avoids iterators, not only begin()/end() but also as return values
- *   from insert() and find(). This bypasses transform_iterator overhead.
- * * Since we literally use compile-time types as keys, the essential insert()
- *   and find() methods accept the key type as a @em template parameter,
- *   accepting and returning value_type as a normal runtime value. This is to
- *   permit future optimization (e.g. compile-time type hashing) without
- *   changing the API.
- */
-template <typename VALUE>
-class LLTypeInfoLookup
-{
-    // Use this for our underlying implementation: lookup by
-    // std::type_info::name() string. This is one of the rare cases in which I
-    // dare use const char* directly, rather than std::string, because I'm
-    // sure that every value returned by std::type_info::name() is static.
-    // HOWEVER, specify our own hash + equality functors: naively comparing
-    // distinct const char* values won't work.
-    typedef boost::unordered_map<const char*, VALUE,
-                                 const_char_star_hash, const_char_star_equal> impl_map_type;
-
-public:
-    typedef VALUE value_type;
-
-    LLTypeInfoLookup() {}
-
-    bool empty() const { return mMap.empty(); }
-    std::size_t size() const { return mMap.size(); }
-
-    template <typename KEY>
-    bool insert(const value_type& value)
-    {
-        // Obtain and store the std::type_info::name() string as the key.
-        // Return just the bool from std::map::insert()'s return pair.
-        return mMap.insert(typename impl_map_type::value_type(typeid(KEY).name(), value)).second;
-    }
-
-    template <typename KEY>
-    boost::optional<value_type> find() const
-    {
-        // Use the std::type_info::name() string as the key.
-        typename impl_map_type::const_iterator found = mMap.find(typeid(KEY).name());
-        if (found == mMap.end())
-            return boost::optional<value_type>();
-        return found->second;
-    }
-
-private:
-    impl_map_type mMap;
-};
-
-#endif /* ! defined(LL_LLTYPEINFOLOOKUP_H) */
diff --git a/indra/llcommon/metaclass.cpp b/indra/llcommon/metaclass.cpp
deleted file mode 100644
index 5e403511cf..0000000000
--- a/indra/llcommon/metaclass.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/** 
- * @file metaclass.cpp
- * @author Babbage
- * @date 2006-05-15
- * @brief Implementation of LLMetaClass
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h" 
-
-#include "metaclass.h"
-
-#include "metaproperty.h"
-#include "reflective.h"
-
-LLMetaClass::LLMetaClass()
-{
-}
-
-//virtual 
-LLMetaClass::~LLMetaClass()
-{
-}
-
-const LLMetaProperty* LLMetaClass::findProperty(const std::string& name) const
-{
-	PropertyIterator iter = mProperties.find(name);
-	if(iter == mProperties.end())
-	{
-		return NULL;
-	}
-	return (*iter).second;
-}
-
-void LLMetaClass::addProperty(const LLMetaProperty* property)
-{
-	mProperties.insert(std::make_pair(property->getName(), property));
-}
-
-U32 LLMetaClass::getPropertyCount() const
-{
-	return mProperties.size();
-}
-
-LLMetaClass::PropertyIterator LLMetaClass::beginProperties() const
-{
-	return mProperties.begin();
-}
-
-LLMetaClass::PropertyIterator LLMetaClass::endProperties() const
-{
-	return mProperties.end();
-}
-
-bool LLMetaClass::isInstance(const LLReflective* object) const
-{
-	// TODO: Babbage: Search through super classes of objects MetaClass.
-	const LLMetaClass* object_meta_class = &(object->getMetaClass());
-	return (object_meta_class == this);
-}
-
diff --git a/indra/llcommon/metaclass.h b/indra/llcommon/metaclass.h
deleted file mode 100644
index 626757d58d..0000000000
--- a/indra/llcommon/metaclass.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** 
- * @file metaclass.h
- * @author Babbage
- * @date 2006-05-15
- * @brief Reflective meta information describing a class.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_METACLASS_H
-#define LL_METACLASS_H
-
-#include <string>
-#include <map>
-
-#include "stdtypes.h"
-
-class LLReflective;
-class LLMetaProperty;
-class LLMetaMethod;
-class LL_COMMON_API LLMetaClass
-{
-public:
-
-	LLMetaClass();
-	virtual ~LLMetaClass();
-  
-	// Create instance of this MetaClass. NULL if class is abstract. 
-	// Gives ownership of returned object.
-	// virtual LLReflective* create() const = 0;
-  
-	// Returns named property or NULL.
-	const LLMetaProperty* findProperty(const std::string& name) const;
-  
-	// Add property to metaclass. Takes ownership of given property.
-	void addProperty(const LLMetaProperty* property);
-	
-	typedef std::map<std::string, const LLMetaProperty*>::const_iterator PropertyIterator;
-	
-	U32 getPropertyCount() const;
-	
-	PropertyIterator beginProperties() const;
-	PropertyIterator endProperties() const;
-  
-	// Returns named property or NULL.
-	// const LLMetaMethod* findMethod(const std::string& name) const;
-  
-	// Add method to metaclass. Takes ownership of given method.
-	// void addMethod(const LLMetaMethod* method);
-  
-	// Find MetaClass by name. NULL if name is unknown.
-	// static LLMetaClass* findClass(const std::string& name);
-	
-	// True if object is instance of this meta class.
-	bool isInstance(const LLReflective* object) const;
-  
-private:
-
-	typedef std::map<std::string, const LLMetaProperty*> PropertyMap;
-	PropertyMap mProperties;
-};
-
-#endif // LL_METACLASS_H
diff --git a/indra/llcommon/metaclasst.h b/indra/llcommon/metaclasst.h
deleted file mode 100644
index b9a7ae219d..0000000000
--- a/indra/llcommon/metaclasst.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/** 
- * @file metaclasst.h
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_METACLASST_H
-#define LL_METACLASST_H
-
-#include "metaclass.h"
-
-template<class TObject>
-class LLMetaClassT : public LLMetaClass
-{
-	public:
-		
-		virtual ~LLMetaClassT() {;}
-		
-		static const LLMetaClassT& instance()
-		{
-			static const LLMetaClassT& instance = buildMetaClass();
-			return instance;
-		}
-	
-	private:
-	
-		static const LLMetaClassT& buildMetaClass()
-		{
-			LLMetaClassT& meta_class = *(new LLMetaClassT());
-			reflectProperties(meta_class);
-			return meta_class;
-		}
-	
-		LLMetaClassT() {;}
-	
-		static void reflectProperties(LLMetaClass&)
-		{
-		}
-};
-
-#endif // LL_METACLASST_H
diff --git a/indra/llcommon/metaproperty.cpp b/indra/llcommon/metaproperty.cpp
deleted file mode 100644
index 98d850bf1e..0000000000
--- a/indra/llcommon/metaproperty.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/** 
- * @file metaproperty.cpp
- * @author Babbage
- * @date 2006-05-15
- * @brief Implementation of LLMetaProperty.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h" 
-
-#include "metaproperty.h"
-
-#include "metaclass.h"
-
-LLMetaProperty::LLMetaProperty(const std::string& name, const LLMetaClass& object_class) : 
-	mName(name), mObjectClass(object_class) 
-{
-}
-
-//virtual 
-LLMetaProperty::~LLMetaProperty()
-{
-}
-
-const LLMetaClass& LLMetaProperty::getObjectMetaClass() const
-{
-	return mObjectClass;
-}
-
-void LLMetaProperty::checkObjectClass(const LLReflective* object) const
-{
-	if(! mObjectClass.isInstance(object))
-	{
-		throw "class cast exception";
-	}
-}
diff --git a/indra/llcommon/metaproperty.h b/indra/llcommon/metaproperty.h
deleted file mode 100644
index bd5bb1a30f..0000000000
--- a/indra/llcommon/metaproperty.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/** 
- * @file metaproperty.h
- * @author Babbage
- * @date 2006-05-15
- * @brief Reflective meta information describing a property of a class.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_METAPROPERTY_H
-#define LL_METAPROPERTY_H
-
-#include "stdtypes.h"
-#include "llsd.h"
-#include "reflective.h"
-
-class LLMetaClass;
-class LLReflective;
-class LL_COMMON_API LLMetaProperty
-{
-public:
-	LLMetaProperty(const std::string& name, const LLMetaClass& object_class);
-  virtual ~LLMetaProperty();
-  
-  // Get property name.
-  const std::string& getName() const {return mName;}
-
-  // Get value of this property.
-  virtual const LLReflective* get(const LLReflective* object) const = 0;
-  
-  // Set value of this property.
-  // virtual void set(LLReflective* object, const LLReflective* value) = 0;
-  
-  // Get value of this property as LLSD. Default returns undefined LLSD.
-  virtual LLSD getLLSD(const LLReflective* object) const = 0;
-  
-  // Get the MetaClass of legal values of this property.
-  // const LLMetaClass& getValueMetaClass();
-  
-  // Get the meta class that this property is a member of.
-  const LLMetaClass& getObjectMetaClass() const;
-
-protected:
-
-  // Check object is instance of object class, throw exception if not.
-  void checkObjectClass(const LLReflective* object) const;
-
-private:
-
-	std::string mName;
-	const LLMetaClass& mObjectClass;
-};
-
-#endif // LL_METAPROPERTY_H
diff --git a/indra/llcommon/metapropertyt.h b/indra/llcommon/metapropertyt.h
deleted file mode 100644
index 7a36c161da..0000000000
--- a/indra/llcommon/metapropertyt.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/** 
- * @file metapropertyt.h
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_METAPROPERTYT_H
-#define LL_METAPROPERTYT_H
-
-#include "llsd.h"
-#include "llstring.h"
-#include "metaclasst.h"
-#include "metaproperty.h"
-#include "reflectivet.h"
-
-template<class TProperty>
-class LLMetaPropertyT : public LLMetaProperty
-{
-public:
-	
-	virtual ~LLMetaPropertyT() {;}
-	
-	// Get value of this property. Gives ownership of returned value.
-	virtual const LLReflective* get(const LLReflective* object) const
-	{
-		checkObjectClass(object);
-		return getProperty(object);
-	}
-  
-	// Set value of this property.
-	/*virtual void set(LLReflective* object, const LLReflective* value)
-	{
-		// TODO: Babbage: Check types.
-		ref(object) = static_cast<const LLReflectiveT<TProperty>* >(value)->getValue();
-	}*/
-	
-	// Get value of this property as LLSD.
-	virtual LLSD getLLSD(const LLReflective* object) const
-	{
-		return LLSD();
-	}
-
-protected:
-
-	LLMetaPropertyT(const std::string& name, const LLMetaClass& object_class) : LLMetaProperty(name, object_class) {;}
-
-	virtual const TProperty* getProperty(const LLReflective* object) const = 0;
-};
-
-template <>
-inline const LLReflective* LLMetaPropertyT<S32>::get(const LLReflective* object) const
-{
-	checkObjectClass(object);
-	return NULL;
-}
-
-template <>
-inline const LLReflective* LLMetaPropertyT<std::string>::get(const LLReflective* object) const
-{
-	checkObjectClass(object);
-	return NULL;
-}
-
-template <>
-inline const LLReflective* LLMetaPropertyT<LLUUID>::get(const LLReflective* object) const
-{
-	checkObjectClass(object);
-	return NULL;
-}
-
-template <>
-inline const LLReflective* LLMetaPropertyT<bool>::get(const LLReflective* object) const
-{
-	checkObjectClass(object);
-	return NULL;
-}
-
-template <>
-inline LLSD LLMetaPropertyT<S32>::getLLSD(const LLReflective* object) const
-{
-	return *(getProperty(object));
-}
-
-template <>
-inline LLSD LLMetaPropertyT<std::string>::getLLSD(const LLReflective* object) const
-{
-	return *(getProperty(object));
-}
-
-template <>
-inline LLSD LLMetaPropertyT<LLUUID>::getLLSD(const LLReflective* object) const
-{
-	return *(getProperty(object));
-}
-
-template <>
-inline LLSD LLMetaPropertyT<bool>::getLLSD(const LLReflective* object) const
-{
-	return *(getProperty(object));
-}
-
-template<class TObject, class TProperty>
-class LLMetaPropertyTT : public LLMetaPropertyT<TProperty>
-{
-public:
-
-	LLMetaPropertyTT(const std::string& name, const LLMetaClass& object_class, TProperty (TObject::*property)) : 
-	  LLMetaPropertyT<TProperty>(name, object_class), mProperty(property) {;}
-
-protected:
-
-	// Get void* to property.
-	virtual const TProperty* getProperty(const LLReflective* object) const
-	{
-		const TObject* typed_object = static_cast<const TObject*>(object);
-		return &(typed_object->*mProperty);
-	};
-
-private:
-
-	TProperty (TObject::*mProperty);
-};
-
-template<class TObject, class TProperty>
-class LLMetaPropertyPtrTT : public LLMetaPropertyT<TProperty>
-{
-public:
-
-	LLMetaPropertyPtrTT(const std::string& name, const LLMetaClass& object_class, TProperty* (TObject::*property)) : 
-	  LLMetaPropertyT<TProperty>(name, object_class), mProperty(property) {;}
-
-protected:
-
-	// Get void* to property.
-	virtual const TProperty* getProperty(const LLReflective* object) const
-	{
-		const TObject* typed_object = static_cast<const TObject*>(object);
-		return typed_object->*mProperty;
-	};
-
-private:
-
-	TProperty* (TObject::*mProperty);
-};
-
-// Utility function to simplify the registration of members.
-template<class TObject, class TProperty>
-void reflectProperty(LLMetaClass& meta_class, const std::string& name, TProperty (TObject::*property))
-{
-	typedef LLMetaPropertyTT<TObject, TProperty> PropertyType;
-	const LLMetaProperty* meta_property = new PropertyType(name, meta_class, property);
-	meta_class.addProperty(meta_property);
-}
-
-// Utility function to simplify the registration of ptr properties.
-template<class TObject, class TProperty>
-void reflectPtrProperty(LLMetaClass& meta_class, const std::string& name, TProperty* (TObject::*property))
-{
-	typedef LLMetaPropertyPtrTT<TObject, TProperty> PropertyType;
-	const LLMetaProperty* meta_property = new PropertyType(name, meta_class, property);
-	meta_class.addProperty(meta_property);
-}
-
-#endif // LL_METAPROPERTYT_H
diff --git a/indra/llcommon/reflective.cpp b/indra/llcommon/reflective.cpp
deleted file mode 100644
index 2cc0e7e1f2..0000000000
--- a/indra/llcommon/reflective.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/** 
- * @file reflective.cpp
- * @author Babbage
- * @date 2006-05-15
- * @brief Implementation of LLReflective.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h" 
- 
-#include "reflective.h"
-
-LLReflective::LLReflective()
-{
-}
-
-//virtual 
-LLReflective::~LLReflective()
-{
-}
diff --git a/indra/llcommon/reflective.h b/indra/llcommon/reflective.h
deleted file mode 100644
index da5c5a2630..0000000000
--- a/indra/llcommon/reflective.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/** 
- * @file reflective.h
- * @author Babbage
- * @date 2006-05-15
- * @brief Interface that must be implemented by all reflective classes.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_REFLECTIVE_H
-#define LL_REFLECTIVE_H
-
-class LLMetaClass;
-class LL_COMMON_API LLReflective
-{
-public:
-	LLReflective();
-	virtual ~LLReflective();
-	
-	virtual const LLMetaClass& getMetaClass() const = 0;
-};
-
-#endif // LL_REFLECTIVE_H
diff --git a/indra/llcommon/reflectivet.h b/indra/llcommon/reflectivet.h
deleted file mode 100644
index 958921f23e..0000000000
--- a/indra/llcommon/reflectivet.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/** 
- * @file reflectivet.h
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_REFLECTIVET_H
-#define LL_REFLECTIVET_H
-
-#include "reflective.h"
-
-template <class T>
-class LLReflectiveT : public LLReflective
-{
-public:
-
-	LLReflectiveT(const T& value) : mValue(value) {;}
-	virtual ~LLReflectiveT() {;}
-	
-	virtual const LLMetaClass& getMetaClass() const {return LLMetaClassT<LLReflectiveT<T> >::instance();}
-	
-	const T& getValue() const {return mValue;}
-	
-private:
-
-	T mValue;
-};
-
-#endif
diff --git a/indra/llcommon/tests/reflection_test.cpp b/indra/llcommon/tests/reflection_test.cpp
deleted file mode 100644
index 8980ebb1f1..0000000000
--- a/indra/llcommon/tests/reflection_test.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/** 
- * @file reflection_test.cpp
- * @date   May 2006
- * @brief Reflection unit tests.
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "../linden_common.h"
-#include "../reflective.h"
-#include "../metaclasst.h"
-#include "../metapropertyt.h"
-#include "../stdtypes.h"
-
-#include "../test/lltut.h"
-
-namespace tut
-{
-  class TestAggregatedData : public LLReflective
-  {
-  public:
-	TestAggregatedData() {;}
-	virtual const LLMetaClass& getMetaClass() const;
-  
-  private:
-  };
-  
-  class TestReflectionData : public LLReflective
-  {
-  public:
-	TestReflectionData() : mInt(42), mString("foo"), mNullPtr(NULL), mPtr(new TestAggregatedData()), mRef(*(new TestAggregatedData)) {;}
-	virtual ~TestReflectionData() {delete mPtr;}
-	virtual const LLMetaClass& getMetaClass() const;
-	
-	static U32 getPropertyCount() {return 5;}
-	
-  private:
-  
-	friend class LLMetaClassT<TestReflectionData>;
-    S32 mInt;
-	std::string mString;
-	TestAggregatedData* mNullPtr;
-	TestAggregatedData* mPtr;
-	TestAggregatedData mObj;
-	TestAggregatedData& mRef;
-  };
-}
-
-template <>
-void LLMetaClassT<tut::TestReflectionData>::reflectProperties(LLMetaClass& meta_class)
-{
-	reflectProperty(meta_class, "mInt", &tut::TestReflectionData::mInt);
-	reflectProperty(meta_class, "mString", &tut::TestReflectionData::mString);
-	reflectPtrProperty(meta_class, "mNullPtr", &tut::TestReflectionData::mNullPtr);
-	reflectPtrProperty(meta_class, "mPtr", &tut::TestReflectionData::mPtr);
-	reflectProperty(meta_class, "mObj", &tut::TestReflectionData::mObj);
-	//reflectProperty(meta_class, "mRef", &tut::TestReflectionData::mRef); // AARGH!
-}
-
-namespace tut
-{
-	// virtual
-	const LLMetaClass& TestReflectionData::getMetaClass() const
-	{
-	   return LLMetaClassT<TestReflectionData>::instance();
-    }
-	
-	const LLMetaClass& TestAggregatedData::getMetaClass() const
-	{
-	   return LLMetaClassT<TestAggregatedData>::instance();
-    }
-}
-
-namespace tut
-{
-  typedef tut::test_group<TestReflectionData> TestReflectionGroup;
-  typedef TestReflectionGroup::object TestReflectionObject;
-  TestReflectionGroup gTestReflectionGroup("reflection");
-
-  template<> template<>
-  void TestReflectionObject::test<1>()
-  {
-	// Check properties can be found.
-    const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	const LLMetaProperty* null = NULL;
-	ensure_not_equals(meta_class.findProperty("mInt"), null);
-	ensure_not_equals(meta_class.findProperty("mString"), null);
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<2>()
-  {
-	// Check non-existent property cannot be found.
-    const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	const LLMetaProperty* null = NULL;
-	ensure_equals(meta_class.findProperty("foo"), null);
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<3>()
-  {
-	// Check integer property has correct value.	
-    const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	ensure_equals(meta_class.findProperty("mInt")->getLLSD(this).asInteger(), 42);
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<4>()
-  {
-	// Check string property has correct value.	
-    const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	ensure_equals(meta_class.findProperty("mString")->getLLSD(this).asString(), std::string("foo"));
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<5>()
-  {
-	// Check NULL reference property has correct value.
-	const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	const LLReflective* null = NULL;
-	ensure_equals(meta_class.findProperty("mNullPtr")->get(this), null);
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<6>()
-  {
-	// Check reference property has correct value.
-	const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	const LLReflective* null = NULL;
-	const LLReflective* ref = meta_class.findProperty("mPtr")->get(this);
-	ensure_not_equals(ref, null);
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<7>()
-  {
-	// Check reflective property has correct value.
-	const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	const LLReflective* null = NULL;
-	const LLReflective* ref = meta_class.findProperty("mObj")->get(this);
-	ensure_not_equals(ref, null);
-  }
-
-  template<> template<>
-  void TestReflectionObject::test<8>()
-  {
-	// Check property count.
-    const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	ensure_equals(meta_class.getPropertyCount(), TestReflectionData::getPropertyCount());
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<9>()
-  {
-	// Check property iteration.
-    const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	U32 count = 0;
-	LLMetaClass::PropertyIterator iter;
-	for(iter = meta_class.beginProperties(); iter != meta_class.endProperties(); ++iter)
-	{
-		++count;
-	}
-	ensure_equals(count, TestReflectionData::getPropertyCount());
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<10>()
-  {
-	// Check meta classes of different types do not compare equal.
-	const LLMetaClass* reflection_data_meta_class = &(LLMetaClassT<TestReflectionData>::instance());
-	const LLMetaClass* aggregated_data_meta_class = &(LLMetaClassT<TestAggregatedData>::instance());
-	ensure_not_equals(reflection_data_meta_class, aggregated_data_meta_class);
-  }
-  
-  template<> template<>
-  void TestReflectionObject::test<11>()
-  {
-	// Check class cast checks.
-	const LLMetaClass& meta_class = LLMetaClassT<TestReflectionData>::instance();
-	TestAggregatedData* aggregated_data = new TestAggregatedData();
-	LLMetaClass::PropertyIterator iter;
-	U32 exception_count = 0;
-	for(iter = meta_class.beginProperties(); iter != meta_class.endProperties(); ++iter)
-	{
-		try
-		{
-			const LLMetaProperty* property = (*iter).second;
-			const LLReflective* reflective = property->get(aggregated_data); // Wrong reflective type, should throw exception.
-
-			// useless op to get rid of compiler warning.
-			reflective = reflective;
-		}
-		catch(...)
-		{
-			++exception_count;
-		}
-	}
-	ensure_equals(exception_count, getPropertyCount());
-	
-  }
-}
diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp
index 7e013de11a..55067cde73 100644
--- a/indra/llinventory/llpermissions.cpp
+++ b/indra/llinventory/llpermissions.cpp
@@ -31,7 +31,6 @@
 
 // library includes
 #include "message.h"
-#include "metapropertyt.h"
 #include "llsd.h"
 
 ///----------------------------------------------------------------------------
@@ -895,21 +894,6 @@ std::ostream& operator<<(std::ostream &s, const LLPermissions &perm)
 	return s;
 }
 
-template <>
-void LLMetaClassT<LLPermissions>::reflectProperties(LLMetaClass& meta_class)
-{
-	reflectProperty(meta_class, "mCreator", &LLPermissions::mCreator);
-	reflectProperty(meta_class, "mOwner", &LLPermissions::mOwner);
-	reflectProperty(meta_class, "mGroup", &LLPermissions::mGroup);
-	reflectProperty(meta_class, "mIsGroupOwned", &LLPermissions::mIsGroupOwned);
-}
-
-// virtual
-const LLMetaClass& LLPermissions::getMetaClass() const
-{
-	return LLMetaClassT<LLPermissions>::instance();
-}
-
 ///----------------------------------------------------------------------------
 /// Class LLAggregatePermissions
 ///----------------------------------------------------------------------------
diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
index 3ecc922370..89c66f6ebd 100644
--- a/indra/llinventory/llpermissions.h
+++ b/indra/llinventory/llpermissions.h
@@ -31,7 +31,6 @@
 #include "llsd.h"
 #include "lluuid.h"
 #include "llxmlnode.h"
-#include "reflective.h"
 #include "llinventorytype.h"
 
 // prototypes
@@ -83,7 +82,7 @@ template<class T> class LLMetaClassT;
 // logical consistency.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-class LLPermissions : public LLReflective
+class LLPermissions
 {
 private:
 	LLUUID			mCreator;				// null if object created by system
@@ -324,9 +323,6 @@ public:
 
 	friend std::ostream& operator<<(std::ostream &s, const LLPermissions &perm);
 
-	// Reflection.
-	friend class LLMetaClassT<LLPermissions>;
-	virtual const LLMetaClass& getMetaClass() const;
 };
 
 // Inlines
diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
index 1589ea29c1..e94e2282a0 100644
--- a/indra/llmessage/message.h
+++ b/indra/llmessage/message.h
@@ -50,9 +50,9 @@
 #include "lltimer.h"
 #include "llpacketring.h"
 #include "llhost.h"
-#include "llhttpclient.h"
+#include "llcurl.h"
 #include "llhttpnode.h"
-#include "llpacketack.h"
+//#include "llpacketack.h"
 #include "llsingleton.h"
 #include "message_prehash.h"
 #include "llstl.h"
@@ -158,7 +158,6 @@ const F32 LL_MAX_LOST_TIMEOUT				= 5.f;				// Maximum amount of time before cons
 const S32 MAX_MESSAGE_COUNT_NUM = 1024;
 
 // Forward declarations
-class LLCircuit;
 class LLVector3;
 class LLVector4;
 class LLVector3d;
@@ -214,19 +213,19 @@ class LLMessageSystem : public LLMessageSenderInterface
 
  public:
 	LLPacketRing				mPacketRing;
-	LLReliablePacketParams			mReliablePacketParams;
+	LLReliablePacketParams		mReliablePacketParams;
 
 	// Set this flag to TRUE when you want *very* verbose logs.
-	BOOL mVerboseLog;
+	BOOL						mVerboseLog;
 
-	F32                                     mMessageFileVersionNumber;
+	F32                         mMessageFileVersionNumber;
 
 	typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t;
 	typedef std::map<U32, LLMessageTemplate*> message_template_number_map_t;
 
 private:
 	message_template_name_map_t		mMessageTemplates;
-	message_template_number_map_t		mMessageNumbers;
+	message_template_number_map_t	mMessageNumbers;
 
 public:
 	S32					mSystemVersionMajor;
@@ -235,7 +234,7 @@ public:
 	S32					mSystemVersionServer;
 	U32					mVersionFlags;
 
-	BOOL					mbProtected;
+	BOOL				mbProtected;
 
 	U32					mNumberHighFreqMessages;
 	U32					mNumberMediumFreqMessages;
@@ -255,11 +254,11 @@ public:
 	U32					mReliablePacketsIn;	    // total reliable packets in
 	U32					mReliablePacketsOut;	    // total reliable packets out
 
-	U32                                     mDroppedPackets;            // total dropped packets in
-	U32                                     mResentPackets;             // total resent packets out
-	U32                                     mFailedResendPackets;       // total resend failure packets out
-	U32                                     mOffCircuitPackets;         // total # of off-circuit packets rejected
-	U32                                     mInvalidOnCircuitPackets;   // total # of on-circuit but invalid packets rejected
+	U32                 mDroppedPackets;            // total dropped packets in
+	U32                 mResentPackets;             // total resent packets out
+	U32                 mFailedResendPackets;       // total resend failure packets out
+	U32                 mOffCircuitPackets;         // total # of off-circuit packets rejected
+	U32                 mInvalidOnCircuitPackets;   // total # of on-circuit but invalid packets rejected
 
 	S64					mUncompressedBytesIn;	    // total uncompressed size of compressed packets in
 	S64					mUncompressedBytesOut;	    // total uncompressed size of compressed packets out
@@ -268,14 +267,14 @@ public:
 	S64					mTotalBytesIn;		    // total size of all uncompressed packets in
 	S64					mTotalBytesOut;		    // total size of all uncompressed packets out
 
-	BOOL                                    mSendReliable;              // does the outgoing message require a pos ack?
+	BOOL                mSendReliable;              // does the outgoing message require a pos ack?
 
-	LLCircuit 	 			mCircuitInfo;
+	LLCircuit 	 		mCircuitInfo;
 	F64					mCircuitPrintTime;	    // used to print circuit debug info every couple minutes
 	F32					mCircuitPrintFreq;	    // seconds
 
-	std::map<U64, U32>			mIPPortToCircuitCode;
-	std::map<U32, U64>			mCircuitCodeToIPPort;
+	std::map<U64, U32>	mIPPortToCircuitCode;
+	std::map<U32, U64>	mCircuitCodeToIPPort;
 	U32					mOurCircuitCode;
 	S32					mSendPacketFailureCount;
 	S32					mUnackedListDepth;
@@ -494,7 +493,7 @@ public:
 		void (*callback)(void **,S32), 
 		void ** callback_data);
 
-	LLHTTPClient::ResponderPtr createResponder(const std::string& name);
+	LLCurl::ResponderPtr createResponder(const std::string& name);
 	S32		sendMessage(const LLHost &host);
 	S32		sendMessage(const U32 circuit);
 private:
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
index 6f8508ee8c..1c9508214c 100644
--- a/indra/llmessage/net.cpp
+++ b/indra/llmessage/net.cpp
@@ -26,7 +26,7 @@
 
 #include "linden_common.h"
 
-#include "net.h"
+//#include "net.h"
 
 // system library includes
 #include <stdexcept>
diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp
index b5bdba996f..ef48ffa39a 100644
--- a/indra/llrender/llfontregistry.cpp
+++ b/indra/llrender/llfontregistry.cpp
@@ -34,13 +34,15 @@
 #include "llcontrol.h"
 #include "lldir.h"
 #include "llwindow.h"
+#include "llxmlnode.h"
 
 extern LLControlGroup gSavedSettings;
 
 using std::string;
 using std::map;
 
-bool fontDescInitFromXML(LLXMLNodePtr node, LLFontDescriptor& desc);
+bool font_desc_init_from_xml(LLXMLNodePtr node, LLFontDescriptor& desc);
+bool init_from_xml(LLFontRegistry* registry, LLXMLNodePtr node);
 
 LLFontDescriptor::LLFontDescriptor():
 	mStyle(0)
@@ -207,7 +209,7 @@ bool LLFontRegistry::parseFontInfo(const std::string& xml_filename)
 		if (root->hasName("fonts"))
 		{
 			// Expect a collection of children consisting of "font" or "font_size" entries
-			bool init_succ = initFromXML(root);
+			bool init_succ = init_from_xml(this, root);
 			success = success || init_succ;
 		}
 	}
@@ -230,7 +232,7 @@ std::string currentOsName()
 #endif
 }
 
-bool fontDescInitFromXML(LLXMLNodePtr node, LLFontDescriptor& desc)
+bool font_desc_init_from_xml(LLXMLNodePtr node, LLFontDescriptor& desc)
 {
 	if (node->hasName("font"))
 	{
@@ -263,14 +265,14 @@ bool fontDescInitFromXML(LLXMLNodePtr node, LLFontDescriptor& desc)
 		{
 			if (child_name == currentOsName())
 			{
-				fontDescInitFromXML(child, desc);
+				font_desc_init_from_xml(child, desc);
 			}
 		}
 	}
 	return true;
 }
 
-bool LLFontRegistry::initFromXML(LLXMLNodePtr node)
+bool init_from_xml(LLFontRegistry* registry, LLXMLNodePtr node)
 {
 	LLXMLNodePtr child;
 	
@@ -281,17 +283,17 @@ bool LLFontRegistry::initFromXML(LLXMLNodePtr node)
 		if (child->hasName("font"))
 		{
 			LLFontDescriptor desc;
-			bool font_succ = fontDescInitFromXML(child, desc);
+			bool font_succ = font_desc_init_from_xml(child, desc);
 			LLFontDescriptor norm_desc = desc.normalize();
 			if (font_succ)
 			{
 				// if this is the first time we've seen this font name,
 				// create a new template map entry for it.
-				const LLFontDescriptor *match_desc = getMatchingFontDesc(desc);
+				const LLFontDescriptor *match_desc = registry->getMatchingFontDesc(desc);
 				if (match_desc == NULL)
 				{
 					// Create a new entry (with no corresponding font).
-					mFontMap[norm_desc] = NULL;
+					registry->mFontMap[norm_desc] = NULL;
 				}
 				// otherwise, find the existing entry and combine data. 
 				else
@@ -306,8 +308,8 @@ bool LLFontRegistry::initFromXML(LLXMLNodePtr node)
 											desc.getFileNames().end());
 					LLFontDescriptor new_desc = *match_desc;
 					new_desc.getFileNames() = match_file_names;
-					mFontMap.erase(*match_desc);
-					mFontMap[new_desc] = NULL;
+					registry->mFontMap.erase(*match_desc);
+					registry->mFontMap[new_desc] = NULL;
 				}
 			}
 		}
@@ -318,7 +320,7 @@ bool LLFontRegistry::initFromXML(LLXMLNodePtr node)
 			if (child->getAttributeString("name",size_name) &&
 				child->getAttributeF32("size",size_value))
 			{
-				mFontSizes[size_name] = size_value;
+				registry->mFontSizes[size_name] = size_value;
 			}
 
 		}
diff --git a/indra/llrender/llfontregistry.h b/indra/llrender/llfontregistry.h
index 059248fbbd..177eb6c8a5 100644
--- a/indra/llrender/llfontregistry.h
+++ b/indra/llrender/llfontregistry.h
@@ -28,7 +28,7 @@
 #ifndef LL_LLFONTREGISTRY_H
 #define LL_LLFONTREGISTRY_H
 
-#include "llxmlnode.h"
+#include "llpointer.h"
 
 class LLFontGL;
 
@@ -65,6 +65,7 @@ private:
 class LLFontRegistry
 {
 public:
+	friend bool init_from_xml(LLFontRegistry*, LLPointer<class LLXMLNode>);
 	// create_gl_textures - set to false for test apps with no OpenGL window,
 	// such as llui_libtest
 	LLFontRegistry(bool create_gl_textures);
@@ -72,7 +73,6 @@ public:
 
 	// Load standard font info from XML file(s).
 	bool parseFontInfo(const std::string& xml_filename); 
-	bool initFromXML(LLXMLNodePtr node);
 
 	// Clear cached glyphs for all fonts.
 	void reset();
@@ -94,6 +94,7 @@ public:
 	const string_vec_t& getUltimateFallbackList() const;
 
 private:
+	LLFontRegistry(const LLFontRegistry& other); // no-copy
 	LLFontGL *createFont(const LLFontDescriptor& desc);
 	typedef std::map<LLFontDescriptor,LLFontGL*> font_reg_map_t;
 	typedef std::map<std::string,F32> font_size_map_t;
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index d7534c416d..76c6877440 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -96,7 +96,8 @@
 #include "llfunctorregistry.h"
 #include "llpointer.h"
 #include "llinitparam.h"
-#include "llnotificationslistener.h"
+#include "llinstancetracker.h"
+//#include "llnotificationslistener.h"
 #include "llnotificationptr.h"
 
 class LLAvatarName;
@@ -966,7 +967,7 @@ private:
 
 	bool mIgnoreAllNotifications;
 
-    boost::scoped_ptr<LLNotificationsListener> mListener;
+    boost::scoped_ptr<class LLNotificationsListener> mListener;
 };
 
 /**
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index dfb9fa60c9..69490d8668 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -31,15 +31,14 @@
 
 #include "llpointer.h"		// LLPointer<>
 #include "llrect.h"
-#include "llcontrol.h"
 #include "llcoord.h"
+#include "llcontrol.h"
 #include "llglslshader.h"
 #include "llinitparam.h"
 #include "llregistry.h"
 #include "lluicolor.h"
 #include "lluicolortable.h"
 #include <boost/signals2.hpp>
-#include "lllazyvalue.h"
 #include "llframetimer.h"
 #include <limits>
 
@@ -59,6 +58,7 @@ class LLWindow;
 class LLView;
 class LLHelp;
 class LLRenderTarget;
+class LLControlGroup;
 
 // UI colors
 extern const LLColor4 UI_VERTEX_COLOR;
diff --git a/indra/llui/lluiimage.h b/indra/llui/lluiimage.h
index f07e8fa746..f9c191e65f 100644
--- a/indra/llui/lluiimage.h
+++ b/indra/llui/lluiimage.h
@@ -30,9 +30,7 @@
 #include "v4color.h"
 #include "llpointer.h"
 #include "llrefcount.h"
-#include "llrefcount.h"
 #include "llrect.h"
-#include <boost/function.hpp>
 #include <boost/signals2.hpp>
 #include "llinitparam.h"
 #include "lltexture.h"
diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp
index 903f10ce10..0291843758 100644
--- a/indra/llui/llxuiparser.cpp
+++ b/indra/llui/llxuiparser.cpp
@@ -338,6 +338,8 @@ LLXSDWriter::LLXSDWriter()
 	registerInspectFunc<LLSD>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:string", _1, _2, _3, _4));
 }
 
+LLXSDWriter::~LLXSDWriter() {}
+
 void LLXSDWriter::writeXSD(const std::string& type_name, LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const std::string& xml_namespace)
 {
 	Schema schema(xml_namespace);
diff --git a/indra/llui/llxuiparser.h b/indra/llui/llxuiparser.h
index 8d0276a8ad..e6bb552623 100644
--- a/indra/llui/llxuiparser.h
+++ b/indra/llui/llxuiparser.h
@@ -29,21 +29,15 @@
 
 #include "llinitparam.h"
 #include "llregistry.h"
-#include "llpointer.h"
+#include "llxmlnode.h"
 
 #include <boost/function.hpp>
 #include <iosfwd>
 #include <stack>
 #include <set>
 
-
-
 class LLView;
 
-
-typedef LLPointer<class LLXMLNode> LLXMLNodePtr;
-
-
 // lookup widget type by name
 class LLWidgetTypeRegistry
 :	public LLRegistrySingleton<std::string, const std::type_info*, LLWidgetTypeRegistry>
@@ -59,8 +53,6 @@ class LLChildRegistryRegistry
 : public LLRegistrySingleton<const std::type_info*, widget_registry_t, LLChildRegistryRegistry>
 {};
 
-
-
 class LLXSDWriter : public LLInitParam::Parser
 {
 	LOG_CLASS(LLXSDWriter);
@@ -70,6 +62,7 @@ public:
 	/*virtual*/ std::string getCurrentElementName() { return LLStringUtil::null; }
 
 	LLXSDWriter();
+	~LLXSDWriter();
 
 protected:
 	void writeAttribute(const std::string& type, const Parser::name_stack_t&, S32 min_count, S32 max_count, const std::vector<std::string>* possible_values);
@@ -124,6 +117,7 @@ public:
 	}
 
 private:
+	LLXUIParser(const LLXUIParser& other); // no-copy
 	void writeXUIImpl(LLXMLNodePtr node, 
 		const LLInitParam::BaseBlock& block, 
 		const LLInitParam::predicate_rule_t rules, 
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 4e60127ef3..2e0fc039c4 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2852,10 +2852,10 @@ BOOL LLAgent::isInGroup(const LLUUID& group_id, BOOL ignore_god_mode /* FALSE */
 	if (!ignore_god_mode && isGodlike())
 		return true;
 
-	S32 count = mGroups.count();
-	for(S32 i = 0; i < count; ++i)
+	U32 count = mGroups.size();
+	for(U32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
 			return TRUE;
 		}
@@ -2872,12 +2872,12 @@ BOOL LLAgent::hasPowerInGroup(const LLUUID& group_id, U64 power) const
 	// GP_NO_POWERS can also mean no power is enough to grant an ability.
 	if (GP_NO_POWERS == power) return FALSE;
 
-	S32 count = mGroups.count();
-	for(S32 i = 0; i < count; ++i)
+	U32 count = mGroups.size();
+	for(U32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
-			return (BOOL)((mGroups.get(i).mPowers & power) > 0);
+			return (BOOL)((mGroups[i].mPowers & power) > 0);
 		}
 	}
 	return FALSE;
@@ -2893,12 +2893,12 @@ U64 LLAgent::getPowerInGroup(const LLUUID& group_id) const
 	if (isGodlike())
 		return GP_ALL_POWERS;
 	
-	S32 count = mGroups.count();
-	for(S32 i = 0; i < count; ++i)
+	U32 count = mGroups.size();
+	for(U32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
-			return (mGroups.get(i).mPowers);
+			return (mGroups[i].mPowers);
 		}
 	}
 
@@ -2907,12 +2907,12 @@ U64 LLAgent::getPowerInGroup(const LLUUID& group_id) const
 
 BOOL LLAgent::getGroupData(const LLUUID& group_id, LLGroupData& data) const
 {
-	S32 count = mGroups.count();
+	S32 count = mGroups.size();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
-			data = mGroups.get(i);
+			data = mGroups[i];
 			return TRUE;
 		}
 	}
@@ -2921,12 +2921,12 @@ BOOL LLAgent::getGroupData(const LLUUID& group_id, LLGroupData& data) const
 
 S32 LLAgent::getGroupContribution(const LLUUID& group_id) const
 {
-	S32 count = mGroups.count();
+	S32 count = mGroups.size();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
-			S32 contribution = mGroups.get(i).mContribution;
+			S32 contribution = mGroups[i].mContribution;
 			return contribution;
 		}
 	}
@@ -2935,12 +2935,12 @@ S32 LLAgent::getGroupContribution(const LLUUID& group_id) const
 
 BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution)
 {
-	S32 count = mGroups.count();
+	S32 count = mGroups.size();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
-			mGroups.get(i).mContribution = contribution;
+			mGroups[i].mContribution = contribution;
 			LLMessageSystem* msg = gMessageSystem;
 			msg->newMessage("SetGroupContribution");
 			msg->nextBlock("AgentData");
@@ -2958,13 +2958,13 @@ BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution)
 
 BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile)
 {
-	S32 count = mGroups.count();
+	S32 count = mGroups.size();
 	for(S32 i = 0; i < count; ++i)
 	{
-		if(mGroups.get(i).mID == group_id)
+		if(mGroups[i].mID == group_id)
 		{
-			mGroups.get(i).mAcceptNotices = accept_notices;
-			mGroups.get(i).mListInProfile = list_in_profile;
+			mGroups[i].mAcceptNotices = accept_notices;
+			mGroups[i].mListInProfile = list_in_profile;
 			LLMessageSystem* msg = gMessageSystem;
 			msg->newMessage("SetGroupAcceptNotices");
 			msg->nextBlock("AgentData");
@@ -2984,7 +2984,7 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO
 
 BOOL LLAgent::canJoinGroups() const
 {
-	return mGroups.count() < gMaxAgentGroups;
+	return (S32)mGroups.size() < gMaxAgentGroups;
 }
 
 LLQuaternion LLAgent::getHeadRotation()
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index a1e899b45d..f8dcfb9789 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -34,6 +34,7 @@
 #include "llcharacter.h"
 #include "llcoordframe.h"			// for mFrameAgent
 #include "llvoavatardefines.h"
+#include "lldarray.h"
 
 #include <boost/function.hpp>
 #include <boost/shared_ptr.hpp>
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index e441f21f90..49e754a720 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -39,6 +39,7 @@
 #include "llinventoryfunctions.h"
 #include "llinventoryobserver.h"
 #include "llinventorypanel.h"
+#include "lllocaltextureobject.h"
 #include "llmd5.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index b539ac38ed..5f5bded3ad 100755
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -37,6 +37,7 @@
 #include "lluictrlfactory.h"
 #include "llagentdata.h"
 #include "llimfloater.h"
+#include "llviewertexture.h"
 
 // library includes
 #include "llavatarnamecache.h"
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 0d55c4429a..c34c09bf87 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -32,13 +32,10 @@
 
 #include "llcallingcard.h"
 
-#include <vector>
 #include <algorithm>
-//#include <iterator>
 
 #include "indra_constants.h"
-#include "llavatarnamecache.h"
-#include "llcachename.h"
+//#include "llcachename.h"
 #include "llstl.h"
 #include "lltimer.h"
 #include "lluuid.h"
@@ -46,18 +43,13 @@
 
 #include "llagent.h"
 #include "llavatarnamecache.h"
-#include "llbutton.h"
 #include "llinventoryobserver.h"
 #include "llinventorymodel.h"
 #include "llnotifications.h"
-#include "llnotificationsutil.h"
-#include "llresmgr.h"
 #include "llslurl.h"
 #include "llimview.h"
 #include "llviewercontrol.h"
-#include "llviewernetwork.h"
 #include "llviewerobjectlist.h"
-#include "llviewerwindow.h"
 #include "llvoavatar.h"
 #include "llavataractions.h"
 
@@ -104,8 +96,6 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id,
 LLAvatarTracker::LLAvatarTracker() :
 	mTrackingData(NULL),
 	mTrackedAgentValid(false),
-	//mInventory(NULL),
-	//mInventoryObserver(NULL),
 	mModifyMask(0x0)	
 {
 }
@@ -639,11 +629,11 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg)
 					payload["from_id"] = agent_id;
 					if(LLRelationship::GRANT_MODIFY_OBJECTS & new_rights)
 					{
-						LLNotificationsUtil::add("GrantedModifyRights",args, payload);
+						LLNotifications::instance().add("GrantedModifyRights",args, payload);
 					}
 					else
 					{
-						LLNotificationsUtil::add("RevokedModifyRights",args, payload);
+						LLNotifications::instance().add("RevokedModifyRights",args, payload);
 					}
 				}
 				(mBuddyInfo[agent_id])->setRightsFrom(new_rights);
@@ -728,7 +718,7 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id,
 	if (online)
 	{
 		notification =
-			LLNotificationsUtil::add("FriendOnline",
+			LLNotifications::instance().add("FriendOnline",
 									 args,
 									 payload.with("respond_on_mousedown", TRUE),
 									 boost::bind(&LLAvatarActions::startIM, agent_id));
@@ -736,7 +726,7 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id,
 	else
 	{
 		notification =
-			LLNotificationsUtil::add("FriendOffline", args, payload);
+			LLNotifications::instance().add("FriendOffline", args, payload);
 	}
 
 	// If there's an open IM session with this agent, send a notification there too.
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 4d72dd1343..dbd4142d44 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -79,7 +79,7 @@ LLTrace::MemStatHandle	LLDrawable::sMemStat("LLDrawable");
 // static
 U32 LLDrawable::sNumZombieDrawables = 0;
 F32 LLDrawable::sCurPixelAngle = 0;
-LLDynamicArrayPtr<LLPointer<LLDrawable> > LLDrawable::sDeadList;
+LLDynamicArray<LLPointer<LLDrawable>, 32 > LLDrawable::sDeadList;
 
 #define FORCE_INVISIBLE_AREA 16.f
 
diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h
index 26796b92d0..e400a8b5f2 100644
--- a/indra/newview/lldrawable.h
+++ b/indra/newview/lldrawable.h
@@ -309,7 +309,7 @@ private:
 	LLVector3		mCurrentScale;
 	
 	static U32 sNumZombieDrawables;
-	static LLDynamicArrayPtr<LLPointer<LLDrawable> > sDeadList;
+	static LLDynamicArray<LLPointer<LLDrawable>, 32> sDeadList;
 } LL_ALIGN_POSTFIX(16);
 
 
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 294cecc703..67dbe6de8b 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -421,7 +421,7 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
 	
 	if (pass == 0)
 	{
-		avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
+		avatarp->renderSkinned();
 	}
 	else
 	{
@@ -1246,7 +1246,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 
 	if( !single_avatar || (avatarp == single_avatar) )
 	{
-		avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
+		avatarp->renderSkinned();
 	}
 }
 
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 15c9e7856f..dda4bc9b3c 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -28,7 +28,6 @@
 #define LL_LLFACE_H
 
 #include "llstrider.h"
-
 #include "llrender.h"
 #include "v2math.h"
 #include "v3math.h"
@@ -37,7 +36,6 @@
 #include "v4coloru.h"
 #include "llquaternion.h"
 #include "xform.h"
-#include "lldarrayptr.h"
 #include "llvertexbuffer.h"
 #include "llviewertexture.h"
 #include "lldrawable.h"
@@ -47,10 +45,8 @@ class LLFacePool;
 class LLVolume;
 class LLViewerTexture;
 class LLTextureEntry;
-class LLVertexProgram;
-class LLViewerTexture;
-class LLGeometryManager;
 class LLTextureAtlasSlot;
+class LLDrawInfo;
 
 const F32 MIN_ALPHA_SIZE = 1024.f;
 const F32 MIN_TEX_ANIM_SIZE = 512.f;
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index 4e10b4fc2c..0fc9150314 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -36,6 +36,7 @@
 #include "lluictrlfactory.h"
 #include "llviewerobjectlist.h"
 #include "llvoavatarself.h"
+#include "lllocaltextureobject.h"
 
 using namespace LLVOAvatarDefines;
 
diff --git a/indra/newview/llgroupiconctrl.cpp b/indra/newview/llgroupiconctrl.cpp
index 2f9810775b..2bcee69b91 100644
--- a/indra/newview/llgroupiconctrl.cpp
+++ b/indra/newview/llgroupiconctrl.cpp
@@ -29,17 +29,7 @@
 #include "llgroupiconctrl.h"
 
 #include "llagent.h"
-/*
-#include "llavatarconstants.h"
-#include "llcallingcard.h" // for LLAvatarTracker
-#include "llavataractions.h"
-#include "llmenugl.h"
-#include "lluictrlfactory.h"
-
-#include "llcachename.h"
-#include "llagentdata.h"
-#include "llimfloater.h"
-*/
+#include "llviewertexture.h"
 
 static LLDefaultChildRegistry::Register<LLGroupIconCtrl> g_i("group_icon");
 
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 81eb1d397e..eb83015f4a 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -41,6 +41,7 @@
 #include "llui.h"
 #include "message.h"
 #include "roles_constants.h"
+#include "llhttpclient.h"
 #include "lltransactiontypes.h"
 #include "llstatusbar.h"
 #include "lleconomy.h"
@@ -50,6 +51,7 @@
 #include "llnotificationsutil.h"
 #include "lluictrlfactory.h"
 #include "lltrans.h"
+#include "llviewerregion.h"
 #include <boost/regex.hpp>
 
 #if LL_MSVC
diff --git a/indra/newview/llhudicon.h b/indra/newview/llhudicon.h
index 644daa0299..2bbc9c839d 100644
--- a/indra/newview/llhudicon.h
+++ b/indra/newview/llhudicon.h
@@ -28,7 +28,6 @@
 #define LL_LLHUDICON_H
 
 #include "llpointer.h"
-#include "lldarrayptr.h"
 
 #include "llhudobject.h"
 #include "v4color.h"
@@ -42,8 +41,6 @@
 #include "lldarray.h"
 
 // Renders a 2D icon billboard floating at the location specified.
-class LLDrawable;
-class LLViewerObject;
 class LLViewerTexture;
 
 class LLHUDIcon : public LLHUDObject
diff --git a/indra/newview/llhudmanager.h b/indra/newview/llhudmanager.h
index 09e79acbfc..effea8f034 100644
--- a/indra/newview/llhudmanager.h
+++ b/indra/newview/llhudmanager.h
@@ -30,13 +30,9 @@
 // Responsible for managing all HUD elements.
 
 #include "llhudobject.h"
-#include "lldarrayptr.h"
+#include "lldarray.h"
 
-class LLViewerObject;
 class LLHUDEffect;
-//Ventrella 9/16/05
-class LLHUDAnimalControls;
-// End Ventrella
 class LLMessageSystem;
 
 class LLHUDManager : public LLSingleton<LLHUDManager>
@@ -59,7 +55,7 @@ public:
 	static LLColor4 sChildColor;
 
 protected:
-	LLDynamicArrayPtr<LLPointer<LLHUDEffect>				> mHUDEffects;
+	LLDynamicArray<LLPointer<LLHUDEffect>, 32> mHUDEffects;
 };
 
 #endif // LL_LLHUDMANAGER_H
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 63eedcdfea..f68012e306 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -38,6 +38,7 @@
 #include "llchiclet.h"
 #include "llchicletbar.h"
 #include "llfloaterreg.h"
+#include "llhttpclient.h"
 #include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
 #include "llinventoryfunctions.h"
 #include "lllayoutstack.h"
@@ -49,6 +50,7 @@
 #include "lltrans.h"
 #include "llchathistory.h"
 #include "llnotifications.h"
+#include "llviewerregion.h"
 #include "llviewerwindow.h"
 #include "llvoicechannel.h"
 #include "lltransientfloatermgr.h"
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 4000570872..080e1e7ad6 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -63,6 +63,7 @@
 #include "lltoolbarview.h"
 #include "llviewercontrol.h"
 #include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
 
 
 const static std::string ADHOC_NAME_SUFFIX(" Conference");
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 7c2cd03d97..3b97ad0901 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -33,13 +33,12 @@
 
 #include "lllogchat.h"
 #include "llvoicechannel.h"
-
+#include "lldarray.h"
 
 class LLAvatarName;
 class LLFriendObserver;
 class LLCallDialogManager;	
 class LLIMSpeakerMgr;
-
 /**
  * Timeout Timer for outgoing Ad-Hoc/Group IM sessions which being initialized by the server
  */
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 17d0b0ffbb..4f727bbd7d 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -37,6 +37,7 @@
 #include "lldateutil.h"
 #include "llfloaterreporter.h"
 #include "llfloaterworldmap.h"
+#include "llhttpclient.h"
 #include "llimview.h"
 #include "llinspect.h"
 #include "llmutelist.h"
@@ -46,6 +47,7 @@
 #include "llviewermenu.h"
 #include "llvoiceclient.h"
 #include "llviewerobjectlist.h"
+#include "llviewerregion.h"
 #include "lltransientfloatermgr.h"
 #include "llnotificationsutil.h"
 
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 949de312be..927ae090c6 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -68,6 +68,7 @@
 #include "llviewermenu.h"
 #include "llviewermessage.h"
 #include "llviewerobjectlist.h"
+#include "llviewerregion.h"
 #include "llviewerwindow.h"
 #include "llvoavatarself.h"
 #include "llwearablelist.h"
diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp
index 34734d57c5..0684734111 100644
--- a/indra/newview/llinventoryicon.cpp
+++ b/indra/newview/llinventoryicon.cpp
@@ -30,6 +30,7 @@
 #include "lldictionary.h"
 #include "llinventorydefines.h"
 #include "llui.h"
+#include "lluiimage.h"
 #include "llwearabletype.h"
 
 struct IconEntry : public LLDictionaryEntry
@@ -47,6 +48,8 @@ public:
 	LLIconDictionary();
 };
 
+typedef LLPointer<LLUIImage> LLUIImagePtr;
+
 LLIconDictionary::LLIconDictionary()
 {
 	addEntry(LLInventoryIcon::ICONNAME_TEXTURE, 				new IconEntry("Inv_Texture"));
diff --git a/indra/newview/llinventoryicon.h b/indra/newview/llinventoryicon.h
index c7e2998a20..cbcddc26a9 100644
--- a/indra/newview/llinventoryicon.h
+++ b/indra/newview/llinventoryicon.h
@@ -30,7 +30,6 @@
 
 #include "llassettype.h"
 #include "llinventorytype.h"
-#include "lluiimage.h"
 
 class LLInventoryIcon
 {
@@ -87,11 +86,11 @@ public:
 										  BOOL item_is_multi = FALSE);
 	static const std::string& getIconName(EIconName idx);
 
-	static LLUIImagePtr getIcon(LLAssetType::EType asset_type,
+	static LLPointer<class LLUIImage> getIcon(LLAssetType::EType asset_type,
 								LLInventoryType::EType inventory_type = LLInventoryType::IT_NONE,
 								U32 misc_flag = 0, // different meanings depending on item type
 								BOOL item_is_multi = FALSE);
-	static LLUIImagePtr getIcon(EIconName idx);
+	static LLPointer<class LLUIImage> getIcon(EIconName idx);
 
 protected:
 	static EIconName assignWearableIcon(U32 misc_flag);
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 8382e875b4..88463c4aa9 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -31,7 +31,7 @@
 #include "llfoldertype.h"
 #include "lldarray.h"
 #include "llframetimer.h"
-#include "llhttpclient.h"
+#include "llcurl.h"
 #include "lluuid.h"
 #include "llpermissionsflags.h"
 #include "llstring.h"
@@ -79,7 +79,7 @@ public:
 	typedef LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array_t;
 	typedef std::set<LLUUID> changed_items_t;
 
-	class fetchInventoryResponder : public LLHTTPClient::Responder
+	class fetchInventoryResponder : public LLCurl::Responder
 	{
 	public:
 		fetchInventoryResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp
index 97ba5b634a..ce04629104 100644
--- a/indra/newview/lllocalbitmaps.cpp
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -48,6 +48,7 @@
 /* misc headers */
 #include "llscrolllistctrl.h"
 #include "llfilepicker.h"
+#include "lllocaltextureobject.h"
 #include "llviewertexturelist.h"
 #include "llviewerobjectlist.h"
 #include "llviewerobject.h"
diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h
index 7a23c7ef6e..f99fc66f4b 100644
--- a/indra/newview/lllocalbitmaps.h
+++ b/indra/newview/lllocalbitmaps.h
@@ -33,6 +33,8 @@
 #include "llvoavatardefines.h"
 
 class LLScrollListCtrl;
+class LLImageRaw;
+class LLViewerObject;
 
 class LLLocalBitmap
 {
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index 6889b98ab1..a86f722db9 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -52,6 +52,7 @@
 #include "llfloaterworldmap.h"
 #include "llviewergenericmessage.h"	// send_generic_message
 #include "llviewerregion.h"
+#include "llviewertexture.h"
 #include "lltrans.h"
 #include "llscrollcontainer.h"
 #include "llstatusbar.h"
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 6b9edcb07c..79713ddb12 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -30,6 +30,7 @@
 #include "llpanel.h"
 #include "llwearable.h"
 #include "lluictrl.h"
+#include "lllocaltextureobject.h"
 #include "llscrollingpanellist.h"
 #include "llvisualparam.h"
 #include "lltoolmorph.h"
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 46c58cd139..76f260cca1 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -38,6 +38,7 @@ class LLFilterEditor;
 class LLGroupList;
 class LLMenuButton;
 class LLTabContainer;
+class LLNetMap;
 
 class LLPanelPeople 
 	: public LLPanel
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index e2e7006773..435797bf80 100755
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -36,6 +36,7 @@
 #include "lltabcontainer.h"
 #include "llviewercontrol.h"
 #include "llviewernetwork.h"
+#include "llweb.h"
 
 static const std::string PANEL_PICKS = "panel_picks";
 
diff --git a/indra/newview/llpanelvoiceeffect.cpp b/indra/newview/llpanelvoiceeffect.cpp
index 5fec6d967d..59ed53815b 100644
--- a/indra/newview/llpanelvoiceeffect.cpp
+++ b/indra/newview/llpanelvoiceeffect.cpp
@@ -35,6 +35,7 @@
 #include "lltrans.h"
 #include "lltransientfloatermgr.h"
 #include "llvoiceclient.h"
+#include "llweb.h"
 
 static LLRegisterPanelClassWrapper<LLPanelVoiceEffect> t_panel_voice_effect("panel_voice_effect");
 
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 07d2f1ad6f..5ad8165a72 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -33,7 +33,9 @@
 #include "llimview.h"
 #include "llsdutil.h"
 #include "lluicolortable.h"
+#include "llhttpclient.h"
 #include "llviewerobjectlist.h"
+#include "llviewerregion.h"
 #include "llvoavatar.h"
 #include "llworld.h"
 
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index d6cd881894..1c2bbbed27 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -31,6 +31,7 @@
 #include "llagent.h"
 #include "llimagej2c.h"
 #include "llimagetga.h"
+#include "lllocaltextureobject.h"
 #include "llnotificationsutil.h"
 #include "llvfile.h"
 #include "llvfs.h"
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index a0c12df834..61d879278d 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -42,6 +42,7 @@
 #include "llfloaterscriptdebug.h"
 #include "lltooltip.h"
 #include "llhudeffecttrail.h"
+#include "llhudicon.h"
 #include "llhudmanager.h"
 #include "llkeyboard.h"
 #include "llmediaentry.h"
diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp
index 7c604a04bf..0a9153eecb 100644
--- a/indra/newview/lltoolselect.cpp
+++ b/indra/newview/lltoolselect.cpp
@@ -32,6 +32,7 @@
 #include "llagentcamera.h"
 #include "llviewercontrol.h"
 #include "lldrawable.h"
+#include "llhudicon.h"
 #include "llmanip.h"
 #include "llmenugl.h"
 #include "llselectmgr.h"
diff --git a/indra/newview/llviewerassetstats.h b/indra/newview/llviewerassetstats.h
index 5b25d791a9..56eaa13df9 100644
--- a/indra/newview/llviewerassetstats.h
+++ b/indra/newview/llviewerassetstats.h
@@ -38,6 +38,7 @@
 #include "llsd.h"
 #include "llvoavatar.h"
 #include "lltrace.h"
+#include "llinitparam.h"
 
 /**
  * @class LLViewerAssetStats
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index 8d8c401dac..4e97dfb201 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -36,6 +36,7 @@
 #include "llviewerwindow.h"
 #include "llvoiceclient.h"
 #include "llviewermedia.h"
+#include "llviewerregion.h"
 #include "llprogressview.h"
 #include "llcallbacklist.h"
 #include "llstartup.h"
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index 5d1aa870a3..1850ed45d1 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -128,7 +128,6 @@ BOOL LLSkinJoint::setupSkinJoint( LLViewerJoint *joint)
 //-----------------------------------------------------------------------------
 
 BOOL LLViewerJointMesh::sPipelineRender = FALSE;
-EAvatarRenderPass LLViewerJointMesh::sRenderPass = AVATAR_RENDER_PASS_SINGLE;
 U32 LLViewerJointMesh::sClothingMaskImageName = 0;
 LLColor4 LLViewerJointMesh::sClothingInnerColor;
 
diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h
index dd5dae1dc1..614d87f2b1 100644
--- a/indra/newview/llviewerjointmesh.h
+++ b/indra/newview/llviewerjointmesh.h
@@ -37,13 +37,6 @@ class LLFace;
 class LLCharacter;
 class LLTexLayerSet;
 
-typedef enum e_avatar_render_pass
-{
-	AVATAR_RENDER_PASS_SINGLE,
-	AVATAR_RENDER_PASS_CLOTHING_INNER,
-	AVATAR_RENDER_PASS_CLOTHING_OUTER
-} EAvatarRenderPass;
-
 class LLSkinJoint
 {
 public:
@@ -84,7 +77,6 @@ public:
 	static BOOL					sPipelineRender;
 	//RN: this is here for testing purposes
 	static U32					sClothingMaskImageName;
-	static EAvatarRenderPass	sRenderPass;
 	static LLColor4				sClothingInnerColor;
 
 public:
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index ef28c3ad53..50b14183c7 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -39,6 +39,7 @@
 #include "llfloaterreg.h"
 #include "llfontgl.h"
 #include "llframetimer.h"
+#include "llhudicon.h"
 #include "llinventory.h"
 #include "llinventorydefines.h"
 #include "llmaterialtable.h"
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 942eb67823..536106fb1e 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -30,8 +30,7 @@
 #include <map>
 
 #include "llassetstorage.h"
-#include "lldarrayptr.h"
-#include "llhudicon.h"
+//#include "llhudicon.h"
 #include "llinventory.h"
 #include "llrefcount.h"
 #include "llprimitive.h"
@@ -43,34 +42,30 @@
 #include "v3math.h"
 #include "llvertexbuffer.h"
 #include "llbbox.h"
-#include "llbbox.h"
 
 class LLAgent;			// TODO: Get rid of this.
 class LLAudioSource;
 class LLAudioSourceVO;
-class LLDataPacker;
 class LLColor4;
-class LLFrameTimer;
+class LLDataPacker;
+class LLDataPackerBinaryBuffer;
 class LLDrawable;
-class LLHost;
 class LLHUDText;
-class LLWorld;
-class LLNameValue;
-class LLNetMap;
+class LLHost;
 class LLMessageSystem;
+class LLNameValue;
 class LLPartSysData;
-class LLPrimitive;
 class LLPipeline;
 class LLTextureEntry;
-class LLViewerTexture;
+class LLVOAvatar;
+class LLVOInventoryListener;
 class LLViewerInventoryItem;
 class LLViewerObject;
+class LLViewerObjectMedia;
 class LLViewerPartSourceScript;
 class LLViewerRegion;
-class LLViewerObjectMedia;
-class LLVOInventoryListener;
-class LLVOAvatar;
-class LLDataPackerBinaryBuffer;
+class LLViewerTexture;
+class LLWorld;
 
 typedef enum e_object_update_type
 {
@@ -645,7 +640,7 @@ public:
 
 	// TODO: Make all this stuff private.  JC
 	LLPointer<LLHUDText> mText;
-	LLPointer<LLHUDIcon> mIcon;
+	LLPointer<class LLHUDIcon> mIcon;
 
 	static			BOOL		sUseSharedDrawables;
 	static	LLTrace::MemStatHandle	sMemStat;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 4d0d3e8718..6ffd3d8fa4 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -47,6 +47,7 @@
 #include "lltooltip.h"
 #include "llworld.h"
 #include "llstring.h"
+#include "llhudicon.h"
 #include "llhudnametag.h"
 #include "lldrawable.h"
 #include "llflexibleobject.h"
@@ -2275,3 +2276,10 @@ bool LLViewerObjectList::OrphanInfo::operator!=(const OrphanInfo &rhs) const
 }
 
 
+LLDebugBeacon::~LLDebugBeacon()
+{
+	if (mHUDObject.notNull())
+	{
+		mHUDObject->markDead();
+	}
+}
diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h
index a7a4969768..65447156e7 100644
--- a/indra/newview/llviewerobjectlist.h
+++ b/indra/newview/llviewerobjectlist.h
@@ -237,20 +237,14 @@ protected:
 class LLDebugBeacon
 {
 public:
-	~LLDebugBeacon()
-	{
-		if (mHUDObject.notNull())
-		{
-			mHUDObject->markDead();
-		}
-	}
+	~LLDebugBeacon();
 
 	LLVector3 mPositionAgent;
 	std::string mString;
 	LLColor4 mColor;
 	LLColor4 mTextColor;
 	S32 mLineWidth;
-	LLPointer<LLHUDObject> mHUDObject;
+	LLPointer<class LLHUDObject> mHUDObject;
 };
 
 
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 926d791d1f..0eb1745cd5 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -331,6 +331,7 @@ LLviewerOctreeGroup::~LLviewerOctreeGroup()
 	{
 		LLViewerRegion::sCurRegionp->clearVisibleGroup(this);
 	}
+	llassert(LLViewerRegion::sCurRegionp->hasVisibleGroup(this) == false);
 }
 
 LLviewerOctreeGroup::LLviewerOctreeGroup(OctreeNode* node) :
diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h
index b6faf4c7ba..2f601d66f3 100644
--- a/indra/newview/llvieweroctree.h
+++ b/indra/newview/llvieweroctree.h
@@ -78,9 +78,6 @@ public:
 	void setGroup(LLviewerOctreeGroup* group);
 	void removeData(LLViewerOctreeEntryData* data);
 
-	LLViewerOctreeEntryData* getData(U32 data_type)const {return mData[data_type];}
-	bool                     hasData(U32 data_type)const {return mData[data_type] != NULL;}
-
 	LLViewerOctreeEntryData* getDrawable() const {return mData[LLDRAWABLE];}
 	bool                     hasDrawable() const {return mData[LLDRAWABLE] != NULL;}
 	LLViewerOctreeEntryData* getVOCacheEntry() const {return mData[LLVOCACHEENTRY];}
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index 27bfcd4343..5c71b4c49e 100644
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -27,7 +27,6 @@
 #ifndef LL_LLVIEWERPARTSIM_H
 #define LL_LLVIEWERPARTSIM_H
 
-#include "lldarrayptr.h"
 #include "llframetimer.h"
 #include "llpointer.h"
 #include "llpartdata.h"
@@ -36,7 +35,6 @@
 class LLViewerTexture;
 class LLViewerPart;
 class LLViewerRegion;
-class LLViewerTexture;
 class LLVOPartGroup;
 
 #define LL_MAX_PARTICLE_COUNT 8192
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index cafe28356d..137849234d 100644
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -54,11 +54,9 @@
 
 // Library headers from llcommon project:
 #include "bitpack.h"
-#include "lldeleteutils.h"
 #include "imageids.h"
 #include "indra_constants.h"
 #include "llinitparam.h"
-
 #include "llallocator.h"
 #include "llapp.h"
 #include "llcriticaldamp.h"
@@ -67,11 +65,7 @@
 #include "llerror.h"
 #include "llfasttimer.h"
 #include "llframetimer.h"
-#include "llhash.h"
-#include "lllocalidhashmap.h"
-#include "llnametable.h"
 #include "llpointer.h"
-#include "llpriqueuemap.h"
 #include "llprocessor.h"
 #include "llrefcount.h"
 #include "llsafehandle.h"
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index a2ff232d02..e85c566394 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -94,28 +94,29 @@ typedef std::map<std::string, std::string> CapabilityMap;
 class LLViewerRegionImpl {
 public:
 	LLViewerRegionImpl(LLViewerRegion * region, LLHost const & host)
-		:	mHost(host),
-			mCompositionp(NULL),
-			mEventPoll(NULL),
-			mSeedCapMaxAttempts(MAX_CAP_REQUEST_ATTEMPTS),
-			mSeedCapMaxAttemptsBeforeLogin(MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN),
-			mSeedCapAttempts(0),
-			mHttpResponderID(0),
-			mLastCameraUpdate(0),
-			mLastCameraOrigin(),
-		    // I'd prefer to set the LLCapabilityListener name to match the region
-		    // name -- it's disappointing that's not available at construction time.
-		    // We could instead store an LLCapabilityListener*, making
-		    // setRegionNameAndZone() replace the instance. Would that pose
-		    // consistency problems? Can we even request a capability before calling
-		    // setRegionNameAndZone()?
-		    // For testability -- the new Michael Feathers paradigm --
-		    // LLCapabilityListener binds all the globals it expects to need at
-		    // construction time.
-		    mCapabilityListener(host.getString(), gMessageSystem, *region,
-		                        gAgent.getID(), gAgent.getSessionID())
-	{
-	}
+	:	mHost(host),
+		mCompositionp(NULL),
+		mEventPoll(NULL),
+		mSeedCapMaxAttempts(MAX_CAP_REQUEST_ATTEMPTS),
+		mSeedCapMaxAttemptsBeforeLogin(MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN),
+		mSeedCapAttempts(0),
+		mHttpResponderID(0),
+		mLastCameraUpdate(0),
+		mLastCameraOrigin(),
+		mVOCachePartition(NULL),
+		mLandp(NULL),
+		// I'd prefer to set the LLCapabilityListener name to match the region
+		// name -- it's disappointing that's not available at construction time.
+		// We could instead store an LLCapabilityListener*, making
+		// setRegionNameAndZone() replace the instance. Would that pose
+		// consistency problems? Can we even request a capability before calling
+		// setRegionNameAndZone()?
+		// For testability -- the new Michael Feathers paradigm --
+		// LLCapabilityListener binds all the globals it expects to need at
+		// construction time.
+		mCapabilityListener(host.getString(), gMessageSystem, *region,
+		                    gAgent.getID(), gAgent.getSessionID())
+	{}
 
 	void buildCapabilityNames(LLSD& capabilityNames);
 
@@ -439,7 +440,7 @@ void LLViewerRegion::loadObjectCache()
 	// Presume success.  If it fails, we don't want to try again.
 	mCacheLoaded = TRUE;
 
-	if(LLVOCache::hasInstance())
+	if(LLVOCache::instanceExists())
 	{
 		LLVOCache::getInstance()->readFromCache(mHandle, mImpl->mCacheID, mImpl->mCacheMap) ;
 		if (mImpl->mCacheMap.empty())
@@ -462,7 +463,7 @@ void LLViewerRegion::saveObjectCache()
 		return;
 	}
 
-	if(LLVOCache::hasInstance())
+	if(LLVOCache::instanceExists())
 	{
 		const F32 start_time_threshold = 600.0f; //seconds
 		bool removal_enabled = sVOCacheCullingEnabled && (mRegionTimer.getElapsedTimeF32() > start_time_threshold); //allow to remove invalid objects from object cache file.
@@ -755,7 +756,7 @@ void LLViewerRegion::replaceCacheEntry(LLVOCacheEntry* old_entry, LLVOCacheEntry
 
 	if(old_entry)
 	{
-		old_entry->copyTo(new_entry);
+		old_entry->moveTo(new_entry);
 		state = old_entry->getState();
 		in_vo_tree = (state == LLVOCacheEntry::INACTIVE && old_entry->getGroup() != NULL);
 		killCacheEntry(old_entry);
@@ -942,6 +943,11 @@ void LLViewerRegion::addVisibleCacheEntry(LLVOCacheEntry* entry)
 	mImpl->mVisibleEntries.insert(entry);
 }
 
+bool LLViewerRegion::hasVisibleGroup(LLviewerOctreeGroup* group)
+{
+	return mImpl->mVisibleGroups.find(group) != mImpl->mVisibleGroups.end();
+}
+
 void LLViewerRegion::clearVisibleGroup(LLviewerOctreeGroup* group)
 {
 	if(mDead)
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 410c903f18..a73898317b 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -225,6 +225,7 @@ public:
 	void removeActiveCacheEntry(LLVOCacheEntry* entry, LLDrawable* drawablep);	
 	void killCacheEntry(U32 local_id); //physically delete the cache entry	
 	void clearVisibleGroup(LLviewerOctreeGroup* group);
+	bool hasVisibleGroup(LLviewerOctreeGroup* group);
 
 	// Like idleUpdate, but forces everything to complete regardless of
 	// how long it takes.
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index fea44a38c6..08d296b88e 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -38,6 +38,7 @@
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llfloaterreg.h"
+#include "llhudicon.h"
 #include "llmeshrepository.h"
 #include "llpanellogin.h"
 #include "llviewerkeyboard.h"
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5a07cdf7c9..1381cf9314 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -55,7 +55,6 @@
 #include "lldriverparam.h"
 #include "lleditingmotion.h"
 #include "llemote.h"
-//#include "llfirstuse.h"
 #include "llfloatertools.h"
 #include "llheadrotmotion.h"
 #include "llhudeffecttrail.h"
@@ -80,10 +79,12 @@
 #include "lltexlayer.h"
 #include "lltoolmorph.h"
 #include "llviewercamera.h"
+#include "llviewerjointmesh.h"
 #include "llviewertexturelist.h"
 #include "llviewermenu.h"
 #include "llviewerobjectlist.h"
 #include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
 #include "llviewershadermgr.h"
 #include "llviewerstats.h"
 #include "llvoavatarself.h"
@@ -216,6 +217,24 @@ struct LLTextureMaskData
 	S32					mLastDiscardLevel;
 };
 
+// Simple utility functions to eventually replace the common 2-line
+// idiom scattered throughout the viewer codebase.  Note that where
+// possible we would rather be using smart pointers of some sort.
+
+template <class T>
+inline void delete_and_clear(T*& ptr)
+{
+	delete ptr;
+	ptr = NULL;
+}
+
+template <class T>
+inline void delete_and_clear_array(T*& array_ptr)
+{
+	delete[] array_ptr;
+	array_ptr = NULL;
+}
+
 /*********************************************************************************
  **                                                                             **
  ** Begin private LLVOAvatar Support classes
@@ -824,14 +843,14 @@ LLVOAvatar::~LLVOAvatar()
 	mRoot.removeAllChildren();
 	mJointMap.clear();
 
-	deleteAndClearArray(mSkeleton);
-	deleteAndClearArray(mCollisionVolumes);
+	delete_and_clear_array(mSkeleton);
+	delete_and_clear_array(mCollisionVolumes);
 
 	mNumJoints = 0;
 
 	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
 	{
-		deleteAndClear(mBakedTextureDatas[i].mTexLayerSet);
+		delete_and_clear(mBakedTextureDatas[i].mTexLayerSet);
 		mBakedTextureDatas[i].mMeshes.clear();
 
 		for (morph_list_t::iterator iter2 = mBakedTextureDatas[i].mMaskedMorphs.begin();
@@ -845,9 +864,9 @@ LLVOAvatar::~LLVOAvatar()
 	std::for_each(mAttachmentPoints.begin(), mAttachmentPoints.end(), DeletePairedPointer());
 	mAttachmentPoints.clear();
 
-	deleteAndClear(mTexSkinColor);
-	deleteAndClear(mTexHairColor);
-	deleteAndClear(mTexEyeColor);
+	delete_and_clear(mTexSkinColor);
+	delete_and_clear(mTexHairColor);
+	delete_and_clear(mTexEyeColor);
 
 	std::for_each(mMeshes.begin(), mMeshes.end(), DeletePairedPointer());
 	mMeshes.clear();
@@ -1234,7 +1253,7 @@ void LLVOAvatar::initClass()
 	// parse avatar_lad.xml
 	if (sAvatarXmlInfo)
 	{ //this can happen if a login attempt failed
-		deleteAndClear(sAvatarXmlInfo);
+		delete_and_clear(sAvatarXmlInfo);
 	}
 	sAvatarXmlInfo = new LLVOAvatarXmlInfo;
 	if (!sAvatarXmlInfo->parseXmlSkeletonNode(root))
@@ -1278,7 +1297,7 @@ void LLVOAvatar::initClass()
 
 void LLVOAvatar::cleanupClass()
 {
-	deleteAndClear(sAvatarXmlInfo);
+	delete_and_clear(sAvatarXmlInfo);
 	sSkeletonXMLTree.cleanup();
 	sXMLTree.cleanup();
 }
@@ -4188,7 +4207,7 @@ U32 LLVOAvatar::renderSkinnedAttachments()
 //-----------------------------------------------------------------------------
 // renderSkinned()
 //-----------------------------------------------------------------------------
-U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
+U32 LLVOAvatar::renderSkinned()
 {
 	U32 num_indices = 0;
 
@@ -4324,57 +4343,50 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
 	//--------------------------------------------------------------------
 	// render all geometry attached to the skeleton
 	//--------------------------------------------------------------------
-	LLViewerJointMesh::sRenderPass = pass;
-
-	if (pass == AVATAR_RENDER_PASS_SINGLE)
-	{
 
-		bool should_alpha_mask = shouldAlphaMask();
-		LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
+	bool should_alpha_mask = shouldAlphaMask();
+	LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
 		
-		if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
-		{
-			gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
-		}
+	if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+	{
+		gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
+	}
 		
-		BOOL first_pass = TRUE;
-		if (!LLDrawPoolAvatar::sSkipOpaque)
+	BOOL first_pass = TRUE;
+	if (!LLDrawPoolAvatar::sSkipOpaque)
+	{
+		if (!isSelf() || gAgent.needsRenderHead() || LLPipeline::sShadowRender)
 		{
-			if (!isSelf() || gAgent.needsRenderHead() || LLPipeline::sShadowRender)
+			if (isTextureVisible(TEX_HEAD_BAKED) || mIsDummy)
 			{
-				if (isTextureVisible(TEX_HEAD_BAKED) || mIsDummy)
-				{
-					num_indices += mMeshLOD[MESH_ID_HEAD]->render(mAdjustedPixelArea, TRUE, mIsDummy);
-					first_pass = FALSE;
-				}
-			}
-			if (isTextureVisible(TEX_UPPER_BAKED) || mIsDummy)
-			{
-				num_indices += mMeshLOD[MESH_ID_UPPER_BODY]->render(mAdjustedPixelArea, first_pass, mIsDummy);
-				first_pass = FALSE;
-			}
-			
-			if (isTextureVisible(TEX_LOWER_BAKED) || mIsDummy)
-			{
-				num_indices += mMeshLOD[MESH_ID_LOWER_BODY]->render(mAdjustedPixelArea, first_pass, mIsDummy);
+				num_indices += mMeshLOD[MESH_ID_HEAD]->render(mAdjustedPixelArea, TRUE, mIsDummy);
 				first_pass = FALSE;
 			}
 		}
-
-		if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+		if (isTextureVisible(TEX_UPPER_BAKED) || mIsDummy)
 		{
-			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+			num_indices += mMeshLOD[MESH_ID_UPPER_BODY]->render(mAdjustedPixelArea, first_pass, mIsDummy);
+			first_pass = FALSE;
 		}
-
-		if (!LLDrawPoolAvatar::sSkipTransparent || LLPipeline::sImpostorRender)
+			
+		if (isTextureVisible(TEX_LOWER_BAKED) || mIsDummy)
 		{
-			LLGLState blend(GL_BLEND, !mIsDummy);
-			LLGLState test(GL_ALPHA_TEST, !mIsDummy);
-			num_indices += renderTransparent(first_pass);
+			num_indices += mMeshLOD[MESH_ID_LOWER_BODY]->render(mAdjustedPixelArea, first_pass, mIsDummy);
+			first_pass = FALSE;
 		}
 	}
-	
-	LLViewerJointMesh::sRenderPass = AVATAR_RENDER_PASS_SINGLE;
+
+	if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+	{
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+	}
+
+	if (!LLDrawPoolAvatar::sSkipTransparent || LLPipeline::sImpostorRender)
+	{
+		LLGLState blend(GL_BLEND, !mIsDummy);
+		LLGLState test(GL_ALPHA_TEST, !mIsDummy);
+		num_indices += renderTransparent(first_pass);
+	}
 	
 	return num_indices;
 }
@@ -5331,7 +5343,7 @@ LLVector3	LLVOAvatar::getPosAgentFromGlobal(const LLVector3d &position)
 //-----------------------------------------------------------------------------
 BOOL LLVOAvatar::allocateCharacterJoints( U32 num )
 {
-	deleteAndClearArray(mSkeleton);
+	delete_and_clear_array(mSkeleton);
 	mNumJoints = 0;
 
 	mSkeleton = new LLViewerJoint[num];
@@ -5355,7 +5367,7 @@ BOOL LLVOAvatar::allocateCharacterJoints( U32 num )
 //-----------------------------------------------------------------------------
 BOOL LLVOAvatar::allocateCollisionVolumes( U32 num )
 {
-	deleteAndClearArray(mCollisionVolumes);
+	delete_and_clear_array(mCollisionVolumes);
 	mNumCollisionVolumes = 0;
 
 	mCollisionVolumes = new LLViewerJointCollisionVolume[num];
@@ -7870,9 +7882,9 @@ LLVOAvatar::LLVOAvatarXmlInfo::~LLVOAvatarXmlInfo()
 	std::for_each(mMeshInfoList.begin(), mMeshInfoList.end(), DeletePointer());
 	std::for_each(mSkeletalDistortionInfoList.begin(), mSkeletalDistortionInfoList.end(), DeletePointer());		
 	std::for_each(mAttachmentInfoList.begin(), mAttachmentInfoList.end(), DeletePointer());
-	deleteAndClear(mTexSkinColorInfo);
-	deleteAndClear(mTexHairColorInfo);
-	deleteAndClear(mTexEyeColorInfo);
+	delete_and_clear(mTexSkinColorInfo);
+	delete_and_clear(mTexHairColorInfo);
+	delete_and_clear(mTexEyeColorInfo);
 	std::for_each(mLayerInfoList.begin(), mLayerInfoList.end(), DeletePointer());		
 	std::for_each(mDriverInfoList.begin(), mDriverInfoList.end(), DeletePointer());
 	std::for_each(mMorphMaskInfoList.begin(), mMorphMaskInfoList.end(), DeletePointer());
@@ -8203,7 +8215,7 @@ BOOL LLVOAvatar::LLVOAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root)
 				mTexSkinColorInfo = new LLTexGlobalColorInfo;
 				if( !mTexSkinColorInfo->parseXml( color_node ) )
 				{
-					deleteAndClear(mTexSkinColorInfo);
+					delete_and_clear(mTexSkinColorInfo);
 					llwarns << "avatar file: mTexSkinColor->parseXml() failed" << llendl;
 					return FALSE;
 				}
@@ -8218,7 +8230,7 @@ BOOL LLVOAvatar::LLVOAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root)
 				mTexHairColorInfo = new LLTexGlobalColorInfo;
 				if( !mTexHairColorInfo->parseXml( color_node ) )
 				{
-					deleteAndClear(mTexHairColorInfo);
+					delete_and_clear(mTexHairColorInfo);
 					llwarns << "avatar file: mTexHairColor->parseXml() failed" << llendl;
 					return FALSE;
 				}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 1adb680962..87d3e40b8c 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -33,7 +33,7 @@
 #include <string>
 #include <vector>
 
-#include <boost/signals2.hpp>
+#include <boost/signals2/trackable.hpp>
 
 #include "imageids.h"			// IMG_INVISIBLE
 #include "llchat.h"
@@ -69,6 +69,7 @@ class LLHUDEffectSpiral;
 class LLTexGlobalColor;
 class LLVOAvatarBoneInfo;
 class LLVOAvatarSkeletonInfo;
+class LLViewerJointMesh;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // LLVOAvatar
@@ -435,7 +436,7 @@ public:
 	bool		isVisuallyMuted() const;
 
 	U32 		renderRigid();
-	U32 		renderSkinned(EAvatarRenderPass pass);
+	U32 		renderSkinned();
 	F32			getLastSkinTime() { return mLastSkinTime; }
 	U32			renderSkinnedAttachments();
 	U32 		renderTransparent(BOOL first_pass);
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 4275552117..69f998f0f3 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -43,6 +43,7 @@
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
 #include "llinventoryfunctions.h"
+#include "lllocaltextureobject.h"
 #include "llnotificationsutil.h"
 #include "llselectmgr.h"
 #include "lltoolgrab.h"	// for needsRenderBeam
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index eba768fef4..b67a6bbacd 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -170,7 +170,7 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 LLVOCacheEntry::~LLVOCacheEntry()
 {
 	mDP.freeBuffer();
-	//llassert(mState == INACTIVE);
+	llassert(mState == INACTIVE);
 }
 
 //virtual 
@@ -191,7 +191,7 @@ void LLVOCacheEntry::setOctreeEntry(LLViewerOctreeEntry* entry)
 	LLViewerOctreeEntryData::setOctreeEntry(entry);
 }
 
-void LLVOCacheEntry::copyTo(LLVOCacheEntry* new_entry)
+void LLVOCacheEntry::moveTo(LLVOCacheEntry* new_entry)
 {
 	//copy LLViewerOctreeEntry
 	if(mEntry.notNull())
@@ -206,6 +206,7 @@ void LLVOCacheEntry::copyTo(LLVOCacheEntry* new_entry)
 	{
 		new_entry->addChild(getChild(i));
 	}
+	mChildrenList.clear();
 }
 
 void LLVOCacheEntry::setState(U32 state)
@@ -465,37 +466,10 @@ const U32 INVALID_TIME = 0 ;
 const char* object_cache_dirname = "objectcache";
 const char* header_filename = "object.cache";
 
-LLVOCache* LLVOCache::sInstance = NULL;
-
-//static 
-LLVOCache* LLVOCache::getInstance() 
-{	
-	if(!sInstance)
-	{
-		sInstance = new LLVOCache() ;
-	}
-	return sInstance ;
-}
-
-//static 
-BOOL LLVOCache::hasInstance() 
-{
-	return sInstance != NULL ;
-}
-
-//static 
-void LLVOCache::destroyClass() 
-{
-	if(sInstance)
-	{
-		delete sInstance ;
-		sInstance = NULL ;
-	}
-}
 
 LLVOCache::LLVOCache():
-	mInitialized(FALSE),
-	mReadOnly(TRUE),
+	mInitialized(false),
+	mReadOnly(true),
 	mNumEntries(0),
 	mCacheSize(1)
 {
@@ -532,7 +506,7 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
 		llwarns << "Cache already initialized." << llendl;
 		return ;
 	}
-	mInitialized = TRUE ;
+	mInitialized = true;
 
 	setDirNames(location);
 	if (!mReadOnly)
@@ -580,7 +554,7 @@ void LLVOCache::removeCache(ELLPath location, bool started)
 	LLFile::rmdir(cache_dir);
 
 	clearCacheInMemory();
-	mInitialized = FALSE ;
+	mInitialized = false;
 }
 
 void LLVOCache::removeCache() 
@@ -607,23 +581,23 @@ void LLVOCache::removeCache()
 
 void LLVOCache::removeEntry(HeaderEntryInfo* entry) 
 {
-	llassert_always(mInitialized) ;
+	llassert_always(mInitialized);
 	if(mReadOnly)
 	{
-		return ;
+		return;
 	}
 	if(!entry)
 	{
-		return ;
+		return;
 	}
 
-	header_entry_queue_t::iterator iter = mHeaderEntryQueue.find(entry) ;
+	header_entry_queue_t::iterator iter = mHeaderEntryQueue.find(entry);
 	if(iter != mHeaderEntryQueue.end())
 	{		
-		mHandleEntryMap.erase(entry->mHandle) ;		
-		mHeaderEntryQueue.erase(iter) ;
-		removeFromCache(entry) ;
-		delete entry ;
+		mHandleEntryMap.erase(entry->mHandle);		
+		mHeaderEntryQueue.erase(iter);
+		removeFromCache(entry);
+		delete entry;
 
 		mNumEntries = mHandleEntryMap.size() ;
 	}
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 2aec88537c..fc0634f133 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -29,7 +29,6 @@
 
 #include "lluuid.h"
 #include "lldatapacker.h"
-#include "lldlinked.h"
 #include "lldir.h"
 #include "llvieweroctree.h"
 
@@ -101,7 +100,7 @@ public:
 	void recordHit();
 	void recordDupe() { mDupeCount++; }
 	
-	void copyTo(LLVOCacheEntry* new_entry); //copy variables 
+	void moveTo(LLVOCacheEntry* new_entry); //copy variables 
 	/*virtual*/ void setOctreeEntry(LLViewerOctreeEntry* entry);
 
 	void setParentID(U32 id) {mParentID = id;}
@@ -161,9 +160,10 @@ public:
 //
 //Note: LLVOCache is not thread-safe
 //
-class LLVOCache
+class LLVOCache : public LLSingleton<LLVOCache>
 {
 private:
+	friend LLSingleton<LLVOCache>;
 	struct HeaderEntryInfo
 	{
 		HeaderEntryInfo() : mIndex(0), mHandle(0), mTime(0) {}
@@ -206,7 +206,7 @@ public:
 	void writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache, bool removal_enabled);
 	void removeEntry(U64 handle) ;
 
-	void setReadOnly(BOOL read_only) {mReadOnly = read_only;} 
+	void setReadOnly(bool read_only) {mReadOnly = read_only;} 
 
 private:
 	void setDirNames(ELLPath location);	
@@ -222,9 +222,9 @@ private:
 	BOOL updateEntry(const HeaderEntryInfo* entry);
 	
 private:
-	BOOL                 mEnabled;
-	BOOL                 mInitialized ;
-	BOOL                 mReadOnly ;
+	bool                 mEnabled;
+	bool                 mInitialized ;
+	bool                 mReadOnly ;
 	HeaderMetaInfo       mMetaInfo;
 	U32                  mCacheSize;
 	U32                  mNumEntries;
@@ -233,12 +233,6 @@ private:
 	LLVolatileAPRPool*   mLocalAPRFilePoolp ; 	
 	header_entry_queue_t mHeaderEntryQueue;
 	handle_entry_map_t   mHandleEntryMap;	
-
-	static LLVOCache* sInstance ;
-public:
-	static LLVOCache* getInstance() ;
-	static BOOL       hasInstance() ;	
-	static void       destroyClass() ;
 };
 
 #endif
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index bd12328a6b..0e76a978db 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -28,12 +28,14 @@
 
 #include "llagent.h"
 #include "llfloaterreg.h"
+#include "llhttpclient.h"
 #include "llimview.h"
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
 #include "llpanel.h"
 #include "llrecentpeople.h"
 #include "llviewercontrol.h"
+#include "llviewerregion.h"
 #include "llvoicechannel.h"
 
 
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index c9aeea35a9..1b362545ec 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -34,7 +34,6 @@ class LLVOAvatar;
 #include "lliosocket.h"
 #include "v3math.h"
 #include "llframetimer.h"
-#include "llviewerregion.h"
 #include "llcallingcard.h"   // for LLFriendObserver
 #include "llsecapi.h"
 #include "llcontrol.h"
diff --git a/indra/newview/llvoinventorylistener.h b/indra/newview/llvoinventorylistener.h
index bf14d19b01..c50c475478 100644
--- a/indra/newview/llvoinventorylistener.h
+++ b/indra/newview/llvoinventorylistener.h
@@ -30,7 +30,9 @@
 #ifndef LL_LLVOINVENTORYLISTENER_H
 #define LL_LLVOINVENTORYLISTENER_H
 
-#include "llviewerobject.h"
+#include "llinventory.h"
+
+class LLViewerObject;
 
 class LLVOInventoryListener
 {
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
index a15878368e..21693e85e1 100644
--- a/indra/newview/llvosurfacepatch.h
+++ b/indra/newview/llvosurfacepatch.h
@@ -33,6 +33,8 @@
 class LLSurfacePatch;
 class LLDrawPool;
 class LLVector2;
+class LLFacePool;
+class LLFace;
 
 class LLVOSurfacePatch : public LLStaticViewerObject
 {
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 12f268d324..89a2f2ee19 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -406,7 +406,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
 				dp->dumpBufferToLog();
 				llwarns << "Flushing cache files" << llendl;
 
-				if(LLVOCache::hasInstance() && getRegion())
+				if(LLVOCache::instanceExists() && getRegion())
 				{
 					LLVOCache::getInstance()->removeEntry(getRegion()->getHandle()) ;
 				}
diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h
index 3d8c53a755..ce5c882c00 100644
--- a/indra/newview/llwearable.h
+++ b/indra/newview/llwearable.h
@@ -34,12 +34,12 @@
 #include "llassetstorage.h"
 #include "llwearabletype.h"
 #include "llfile.h"
-#include "lllocaltextureobject.h"
 
 class LLViewerInventoryItem;
 class LLVisualParam;
 class LLTexGlobalColorInfo;
 class LLTexGlobalColor;
+class LLLocalTextureObject;
 
 class LLWearable
 {
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 9401773886..a123c12811 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -123,10 +123,7 @@ void LLWorld::destroyClass()
 		LLViewerRegion* region_to_delete = *region_it++;
 		removeRegion(region_to_delete->getHost());
 	}
-	if(LLVOCache::hasInstance())
-	{
-		LLVOCache::getInstance()->destroyClass() ;
-	}
+	LLVOCache::deleteSingleton();
 	LLViewerPartSim::getInstance()->destroyClass();
 
 	mDefaultWaterTexturep = NULL ;
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 36abeca295..720ddf79f5 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -29,8 +29,6 @@
 
 #include "llcamera.h"
 #include "llerror.h"
-#include "lldarrayptr.h"
-#include "lldqueueptr.h"
 #include "lldrawpool.h"
 #include "llspatialpartition.h"
 #include "m4math.h"
@@ -42,25 +40,13 @@
 
 #include <stack>
 
-#include <stack>
-
-#include <stack>
-
 class LLViewerTexture;
-class LLEdge;
 class LLFace;
 class LLViewerObject;
-class LLAgent;
-class LLDisplayPrimitive;
 class LLTextureEntry;
-class LLRenderFunc;
-class LLCubeMap;
 class LLCullResult;
 class LLVOAvatar;
 class LLGLSLShader;
-class LLCurlRequest;
-
-class LLMeshResponder;
 
 typedef enum e_avatar_skinning_method
 {
-- 
cgit v1.2.3