diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 1cebb53a07df035e68d4334f2290a06dea2fc361..078b17bf53ffd74fc97bed475aa465260f962213 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -41,6 +41,7 @@ endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}
 add_subdirectory(cmake)
 
 add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
+add_subdirectory(${LIBS_OPEN_PREFIX}llappearance)
 add_subdirectory(${LIBS_OPEN_PREFIX}llcharacter)
 add_subdirectory(${LIBS_OPEN_PREFIX}llcommon)
 add_subdirectory(${LIBS_OPEN_PREFIX}llimage)
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index 569034a6fb97d615d60af6ed7a17aae61312cebf..875b5be1526a1c1504f423a0ca6fe0a90a071081 100644
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -40,6 +40,7 @@ set(cmake_SOURCE_FILES
     Hunspell.cmake
     JPEG.cmake
     LLAddBuildTest.cmake
+    LLAppearance.cmake
     LLAudio.cmake
     LLCharacter.cmake
     LLCommon.cmake
@@ -77,6 +78,7 @@ set(cmake_SOURCE_FILES
     Tut.cmake
     UI.cmake
     UnixInstall.cmake
+    Viewer.cmake
     Variables.cmake
     XmlRpcEpi.cmake
     ZLIB.cmake
diff --git a/indra/cmake/LLAppearance.cmake b/indra/cmake/LLAppearance.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..36cebe98165ec0e900ef405f233e440eaccbe434
--- /dev/null
+++ b/indra/cmake/LLAppearance.cmake
@@ -0,0 +1,7 @@
+# -*- cmake -*-
+
+set(LLAPPEARANCE_INCLUDE_DIRS
+    ${LIBS_OPEN_DIR}/llappearance
+    )
+
+set(LLAPPEARANCE_LIBRARIES llappearance)
diff --git a/indra/cmake/Viewer.cmake b/indra/cmake/Viewer.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..771bb0ed7ae7633d45a28dccb342de12be70f7a9
--- /dev/null
+++ b/indra/cmake/Viewer.cmake
@@ -0,0 +1,7 @@
+# -*- cmake -*-
+
+set(VIEWER_INCLUDE_DIRS
+    ${LIBS_OPEN_DIR}/newview
+    )
+
+set(VIEWER_LIBRARIES viewer)
diff --git a/indra/llappearance/CMakeLists.txt b/indra/llappearance/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..39bfbc9a2105ee15103c6e037a7aa5e0cbb5eaf2
--- /dev/null
+++ b/indra/llappearance/CMakeLists.txt
@@ -0,0 +1,78 @@
+# -*- cmake -*-
+
+project(llappearance)
+
+include(00-Common)
+include(LLCommon)
+include(Viewer)
+include(LLAudio)
+include(LLCharacter)
+include(LLCommon)
+include(LLImage)
+include(LLImageJ2COJ)
+include(LLInventory)
+include(LLMath)
+include(LLMessage)
+include(LLPhysicsExtensions)
+include(LLPlugin)
+include(LLPrimitive)
+include(LLRender)
+include(LLUI)
+include(LLVFS)
+include(LLWindow)
+include(LLXML)
+include(Linking)
+include(LLKDU)
+include(ViewerMiscLibs)
+include(LLLogin)
+
+include_directories(
+    ${LLCOMMON_INCLUDE_DIRS}
+    ${VIEWER_INCLUDE_DIRS}
+    ${LLAUDIO_INCLUDE_DIRS}
+    ${LLCHARACTER_INCLUDE_DIRS}
+    ${LLCOMMON_INCLUDE_DIRS}
+    ${LLPHYSICS_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    ${LLKDU_INCLUDE_DIRS}
+    ${LLINVENTORY_INCLUDE_DIRS}
+    ${LLMATH_INCLUDE_DIRS}
+    ${LLMESSAGE_INCLUDE_DIRS}
+    ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS}
+    ${LLPLUGIN_INCLUDE_DIRS}
+    ${LLPRIMITIVE_INCLUDE_DIRS}
+    ${LLRENDER_INCLUDE_DIRS}
+    ${LLUI_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLWINDOW_INCLUDE_DIRS}
+    ${LLXML_INCLUDE_DIRS}
+    ${LLLOGIN_INCLUDE_DIRS}
+    )
+
+set(llappearance_SOURCE_FILES
+    llwearable.cpp
+    )
+    
+set(llappearance_HEADER_FILES
+    llwearable.h
+    CMakeLists.txt
+    )
+
+set_source_files_properties(${llappearance_HEADER_FILES}
+                            PROPERTIES HEADER_FILE_ONLY TRUE)
+
+list(APPEND llappearance_SOURCE_FILES ${llappearance_HEADER_FILES})
+
+add_library (llappearance ${llappearance_SOURCE_FILES})
+
+#add unit tests
+#if (LL_TESTS)
+#    INCLUDE(LLAddBuildTest)
+#    SET(llappearance_TEST_SOURCE_FILES
+#      # no real unit tests yet!
+#      )
+#    LL_ADD_PROJECT_UNIT_TESTS(llappearance "${llappearance_TEST_SOURCE_FILES}")
+
+    #set(TEST_DEBUG on)
+#    set(test_libs llappearance ${LLCOMMON_LIBRARIES})
+#endif (LL_TESTS)
diff --git a/indra/newview/llwearable.cpp b/indra/llappearance/llwearable.cpp
similarity index 98%
rename from indra/newview/llwearable.cpp
rename to indra/llappearance/llwearable.cpp
index 402504933cd9e3ea8e4e5fdb5ccb5da7f94cceeb..d72999d8c78e91131b2ac4f1eef25e6aa22dfa50 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/llappearance/llwearable.cpp
@@ -24,29 +24,29 @@
  * $/LicenseInfo$
  */
 
-#include "llviewerprecompiledheaders.h"
+//#include "llviewerprecompiledheaders.h"
 
-#include "llagent.h"
-#include "llagentcamera.h"
+//#include "llagent.h"
+//#include "llagentcamera.h"
 #include "llagentwearables.h"
-#include "lldictionary.h"
-#include "llfloatersidepanelcontainer.h"
-#include "lllocaltextureobject.h"
-#include "llnotificationsutil.h"
-#include "llviewertexturelist.h"
-#include "llinventorymodel.h"
-#include "llinventoryobserver.h"
-#include "llsidepanelappearance.h"
+//#include "lldictionary.h"
+//#include "llfloatersidepanelcontainer.h"
+//#include "lllocaltextureobject.h"
+//#include "llnotificationsutil.h"
+//#include "llviewertexturelist.h"
+//#include "llinventorymodel.h"
+//#include "llinventoryobserver.h"
+//#include "llsidepanelappearance.h"
 #include "lltexlayer.h"
-#include "lltexglobalcolor.h"
-#include "lltrans.h"
-#include "llviewerregion.h"
+//#include "lltexglobalcolor.h"
+//#include "lltrans.h"
+//#include "llviewerregion.h"
 #include "llvisualparam.h"
-#include "llvoavatar.h"
-#include "llvoavatarself.h"
-#include "llvoavatardefines.h"
+//#include "llvoavatar.h"
+//#include "llvoavatarself.h"
+//#include "llvoavatardefines.h"
 #include "llwearable.h"
-#include "llviewercontrol.h"
+//#include "llviewercontrol.h"
 
 using namespace LLVOAvatarDefines;
 
diff --git a/indra/newview/llwearable.h b/indra/llappearance/llwearable.h
similarity index 96%
rename from indra/newview/llwearable.h
rename to indra/llappearance/llwearable.h
index 3d8c53a755c3a17efe810d10d272b224f0d750f8..c8f9ef1fb946ddf92d04cd84a7fe69647a123134 100644
--- a/indra/newview/llwearable.h
+++ b/indra/llappearance/llwearable.h
@@ -27,14 +27,14 @@
 #ifndef LL_LLWEARABLE_H
 #define LL_LLWEARABLE_H
 
-#include "lluuid.h"
-#include "llstring.h"
-#include "llpermissions.h"
-#include "llsaleinfo.h"
-#include "llassetstorage.h"
-#include "llwearabletype.h"
-#include "llfile.h"
-#include "lllocaltextureobject.h"
+//#include "lluuid.h"
+//#include "llstring.h"
+//#include "llpermissions.h"
+//#include "llsaleinfo.h"
+//#include "llassetstorage.h"
+//#include "llwearabletype.h"
+//#include "llfile.h"
+//#include "lllocaltextureobject.h"
 
 class LLViewerInventoryItem;
 class LLVisualParam;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 2c9952cbc8e22af5df9bddac89d28dd25e8d7a2c..ff3fb0038cf4945177c558bae83fa94a909c5fc8 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -44,6 +44,7 @@ include(LLLogin)
 include(VisualLeakDetector)
 include(GLOD)
 include(CMakeCopyIfDifferent)
+include(LLAppearance)
 
 add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions)
 
@@ -77,6 +78,7 @@ include_directories(
     ${LIBS_PREBUILD_DIR}/include/hunspell
     ${OPENAL_LIB_INCLUDE_DIRS}
     ${LIBS_PREBUILT_DIR}/include/collada/1.4
+    ${LLAPPEARANCE_INCLUDE_DIRS}
     )
 
 set(viewer_SOURCE_FILES
@@ -625,7 +627,6 @@ set(viewer_SOURCE_FILES
     llwatchdog.cpp
     llwaterparammanager.cpp
     llwaterparamset.cpp
-    llwearable.cpp
     llwearableitemslist.cpp
     llwearablelist.cpp
     llwearabletype.cpp
@@ -1194,7 +1195,6 @@ set(viewer_HEADER_FILES
     llwatchdog.h
     llwaterparammanager.h
     llwaterparamset.h
-    llwearable.h
     llwearableitemslist.h
     llwearablelist.h
     llwearabletype.h