diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5a9ee92b0c1b5d7f100af97738fb2657a65f493a..e8ee43d7a07463cf1fb12be1b4da9b0136034309 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -517,7 +517,7 @@ set(viewer_SOURCE_FILES
     llviewerfloaterreg.cpp
     llviewerfoldertype.cpp
     llviewergenericmessage.cpp
-    llviewergesture.cpp    
+    llviewergesture.cpp
     llviewerhelp.cpp
     llviewerhelputil.cpp
     llviewerhome.cpp
@@ -564,7 +564,6 @@ set(viewer_SOURCE_FILES
     llvoavatardefines.cpp
     llvoavatarself.cpp
     llvocache.cpp
-    llvoclouds.cpp
     llvograss.cpp
     llvoground.cpp
     llvoicecallhandler.cpp
@@ -691,7 +690,6 @@ set(viewer_HEADER_FILES
     lldrawpoolalpha.h
     lldrawpoolavatar.h
     lldrawpoolbump.h
-    lldrawpoolclouds.h
     lldrawpoolground.h
     lldrawpoolsimple.h
     lldrawpoolsky.h
@@ -995,7 +993,7 @@ set(viewer_HEADER_FILES
     llsurface.h
     llsurfacepatch.h
     llsyswellitem.h
-    llsyswellwindow.h    
+    llsyswellwindow.h
     lltable.h
     llteleporthistory.h
     llteleporthistorystorage.h
@@ -1067,7 +1065,7 @@ set(viewer_HEADER_FILES
     llviewerfloaterreg.h
     llviewerfoldertype.h
     llviewergenericmessage.h
-    llviewergesture.h    
+    llviewergesture.h
     llviewerhelp.h
     llviewerhome.h
     llviewerinventory.h
@@ -1111,7 +1109,6 @@ set(viewer_HEADER_FILES
     llvoavatardefines.h
     llvoavatarself.h
     llvocache.h
-    llvoclouds.h
     llvograss.h
     llvoground.h
     llvoicechannel.h
@@ -1223,7 +1220,7 @@ if (WINDOWS)
     # precompiled header configuration
     # llviewerprecompiledheaders.cpp generates
     # the .pch file.
-    # All sources added to viewer_SOURCE_FILES 
+    # All sources added to viewer_SOURCE_FILES
     # at this point use it.
     if(USE_PRECOMPILED_HEADERS)
         set_source_files_properties(llviewerprecompiledheaders.cpp
@@ -1232,7 +1229,7 @@ if (WINDOWS)
             )
         set(viewer_SOURCE_FILES "${viewer_SOURCE_FILES}" llviewerprecompiledheaders.cpp)
     endif(USE_PRECOMPILED_HEADERS)
-    
+
     # Add resource files to the project.
     # viewerRes.rc is the only buildable file, but
     # the rest are all dependencies of it.
@@ -1277,8 +1274,8 @@ if (WINDOWS)
     set_source_files_properties(${viewer_RESOURCE_FILES}
                                 PROPERTIES HEADER_FILE_ONLY TRUE)
 
-    set(viewer_RESOURCE_FILES 
-        res/viewerRes.rc 
+    set(viewer_RESOURCE_FILES
+        res/viewerRes.rc
         ${viewer_RESOURCE_FILES}
         )
 
@@ -1286,7 +1283,7 @@ if (WINDOWS)
 
     if (NOT STANDALONE)
         list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
-    endif (NOT STANDALONE)      
+    endif (NOT STANDALONE)
 
     find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR})
     find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR})
@@ -1495,7 +1492,7 @@ if (WINDOWS)
         ${SHARED_LIB_STAGING_DIR}/Debug/libtcmalloc_minimal-debug.dll
         )
      endif(USE_GOOGLE_PERFTOOLS)
- 
+
 
     set(COPY_INPUT_DEPENDENCIES
       # The following commented dependencies are determined at variably at build time. Can't do this here.
@@ -1593,24 +1590,24 @@ if (WINDOWS)
         --grid=${GRID}
         --source=${CMAKE_CURRENT_SOURCE_DIR}
         --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
-      DEPENDS 
+      DEPENDS
         ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
         stage_third_party_libs
         ${COPY_INPUT_DEPENDENCIES}
       COMMENT "Performing viewer_manifest copy"
       )
-    
-    add_custom_target(copy_w_viewer_manifest ALL DEPENDS ${CMAKE_CFG_INTDIR}/copy_touched.bat) 
+
+    add_custom_target(copy_w_viewer_manifest ALL DEPENDS ${CMAKE_CFG_INTDIR}/copy_touched.bat)
 
     add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon copy_w_viewer_manifest)
-    
+
     if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
       add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
     endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
-        
-    add_dependencies(${VIEWER_BINARY_NAME} 
-      SLPlugin 
-      windows-updater 
+
+    add_dependencies(${VIEWER_BINARY_NAME}
+      SLPlugin
+      windows-updater
       windows-crash-logger
       )
 
@@ -1620,7 +1617,7 @@ if (WINDOWS)
             TARGET ${VIEWER_BINARY_NAME} POST_BUILD
             COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
             ARGS
-              --solution 
+              --solution
               ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
               --workingdir
               ${VIEWER_BINARY_NAME}
@@ -1638,12 +1635,12 @@ if (WINDOWS)
           ${CMAKE_CURRENT_SOURCE_DIR}/..
           ${CMAKE_CURRENT_BINARY_DIR}
           ${CMAKE_CFG_INTDIR}
-        DEPENDS 
-          lleventhost 
+        DEPENDS
+          lleventhost
           ${EVENT_HOST_SCRIPTS}
           ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py
         )
-    
+
       add_custom_command(
         OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
         COMMAND ${PYTHON_EXECUTABLE}
@@ -1659,15 +1656,15 @@ if (WINDOWS)
           --login_channel=${VIEWER_LOGIN_CHANNEL}
           --source=${CMAKE_CURRENT_SOURCE_DIR}
           --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
-        DEPENDS 
-            ${VIEWER_BINARY_NAME} 
+        DEPENDS
+            ${VIEWER_BINARY_NAME}
             ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
             ${COPY_INPUT_DEPENDENCIES}
         )
 
-      add_custom_target(package ALL DEPENDS 
+      add_custom_target(package ALL DEPENDS
         ${CMAKE_CFG_INTDIR}/touched.bat
-        windows-setup-build-all 
+        windows-setup-build-all
         )
         # temporarily disable packaging of event_host until hg subrepos get
         # sorted out on the parabuild cluster...
@@ -1735,7 +1732,7 @@ else (USE_KDU)
         ${LLIMAGEJ2COJ_LIBRARIES}
         )
 endif (USE_KDU)
-    
+
 build_version(viewer)
 
 set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
@@ -1794,13 +1791,13 @@ if (LINUX)
       --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
       --grid=${GRID}
       --source=${CMAKE_CURRENT_SOURCE_DIR}
-    DEPENDS 
+    DEPENDS
       ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
       ${COPY_INPUT_DEPENDENCIES}
     COMMENT "Performing viewer_manifest copy"
     )
-    
-  add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched) 
+
+  add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)
 
   if (PACKAGE)
     add_custom_target(package ALL DEPENDS ${product}.tar.bz2)
@@ -1845,7 +1842,7 @@ if (DARWIN)
   add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
 
   if (PACKAGE)
-      add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) 
+      add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
 
       add_custom_command(
         TARGET package POST_BUILD
@@ -1940,7 +1937,7 @@ if (LL_TESTS)
   )
 
   ##################################################
-  # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS 
+  # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
   ##################################################
   # if(USE_PRECOMPILED_HEADERS)
   #     set_source_files_properties(
@@ -1954,33 +1951,33 @@ if (LL_TESTS)
   #set(TEST_DEBUG on)
   set(test_sources llcapabilitylistener.cpp)
   ##################################################
-  # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS 
+  # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
   ##################################################
   # if(USE_PRECOMPILED_HEADERS)
   #     set(test_sources "${test_sources}" llviewerprecompiledheaders.cpp)
   # endif(USE_PRECOMPILED_HEADERS)
-  set(test_libs 
-    ${LLMESSAGE_LIBRARIES} 
-    ${WINDOWS_LIBRARIES} 
+  set(test_libs
+    ${LLMESSAGE_LIBRARIES}
+    ${WINDOWS_LIBRARIES}
     ${LLVFS_LIBRARIES}
     ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES} 
+    ${LLCOMMON_LIBRARIES}
     ${GOOGLEMOCK_LIBRARIES}
     )
 
-  LL_ADD_INTEGRATION_TEST(llcapabilitylistener 
-    "${test_sources}" 
+  LL_ADD_INTEGRATION_TEST(llcapabilitylistener
+    "${test_sources}"
     "${test_libs}"
     ${PYTHON_EXECUTABLE}
     "${CMAKE_SOURCE_DIR}/llmessage/tests/test_llsdmessage_peer.py"
     )
 
-  set(test_libs 
-    ${LLMESSAGE_LIBRARIES} 
-    ${WINDOWS_LIBRARIES} 
+  set(test_libs
+    ${LLMESSAGE_LIBRARIES}
+    ${WINDOWS_LIBRARIES}
     ${LLVFS_LIBRARIES}
     ${LLMATH_LIBRARIES}
-    ${LLCOMMON_LIBRARIES} 
+    ${LLCOMMON_LIBRARIES}
     ${GOOGLEMOCK_LIBRARIES}
     ${OPENSSL_LIBRARIES}
     ${CRYPTO_LIBRARIES}
diff --git a/indra/newview/llcloud.cpp b/indra/newview/llcloud.cpp
deleted file mode 100644
index cda0f6e4a2572b5a817336a6b5bd3192029a0cc6..0000000000000000000000000000000000000000
--- a/indra/newview/llcloud.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/** 
- * @file llcloud.cpp
- * @brief Implementation of viewer LLCloudLayer 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$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llmath.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v4math.h"
-#include "llquaternion.h"
-#include "llrand.h"
-#include "v4color.h"
-
-#include "llwind.h"
-#include "llcloud.h"
-#include "llgl.h"
-#include "llviewerobjectlist.h"
-#include "llvoclouds.h"
-#include "llvosky.h"
-#include "llsky.h"
-#include "llviewerregion.h"
-#include "patch_dct.h"
-#include "patch_code.h"
-#include "llglheaders.h"
-#include "pipeline.h"
-#include "lldrawpool.h"
-#include "llworld.h"
-
-extern LLPipeline gPipeline;
-
-const F32 CLOUD_UPDATE_RATE = 1.0f;  // Global time dilation for clouds
-const F32 CLOUD_GROW_RATE = 0.05f;
-const F32 CLOUD_DECAY_RATE = -0.05f;
-const F32 CLOUD_VELOCITY_SCALE = 0.01f;
-const F32 CLOUD_DENSITY = 25.f;
-const S32 CLOUD_COUNT_MAX = 20;
-const F32 CLOUD_HEIGHT_RANGE = 48.f;
-const F32 CLOUD_HEIGHT_MEAN = 192.f;
-
-enum
-{
-	LL_PUFF_GROWING = 0,
-	LL_PUFF_DYING = 1
-};
-
-// Used for patch decoder
-S32 gBuffer[16*16];
-
-
-//static
-S32 LLCloudPuff::sPuffCount = 0;
-
-LLCloudPuff::LLCloudPuff() :
-	mAlpha(0.01f),
-	mRate(CLOUD_GROW_RATE*CLOUD_UPDATE_RATE),
-	mLifeState(LL_PUFF_GROWING)
-{
-}
-
-LLCloudGroup::LLCloudGroup() :
-	mCloudLayerp(NULL),
-	mDensity(0.f),
-	mTargetPuffCount(0),
-	mVOCloudsp(NULL)
-{
-}
-
-void LLCloudGroup::cleanup()
-{
-	if (mVOCloudsp)
-	{
-		if (!mVOCloudsp->isDead())
-		{
-			gObjectList.killObject(mVOCloudsp);
-		}
-		mVOCloudsp = NULL;
-	}
-}
-
-void LLCloudGroup::setCenterRegion(const LLVector3 &center)
-{
-	mCenterRegion = center;
-}
-
-void LLCloudGroup::updatePuffs(const F32 dt)
-{
-	mDensity = mCloudLayerp->getDensityRegion(mCenterRegion);
-
-	if (!mVOCloudsp)
-	{
-		mVOCloudsp = (LLVOClouds *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_CLOUDS, mCloudLayerp->getRegion());
-		mVOCloudsp->setCloudGroup(this);
-		mVOCloudsp->setPositionRegion(mCenterRegion);
-		mVOCloudsp->setScale(LLVector3(256.f/CLOUD_GROUPS_PER_EDGE + CLOUD_PUFF_WIDTH,
-										 256.f/CLOUD_GROUPS_PER_EDGE + CLOUD_PUFF_WIDTH,
-										 CLOUD_HEIGHT_RANGE + CLOUD_PUFF_HEIGHT)*0.5f);
-		gPipeline.createObject(mVOCloudsp);
-	}
-
-	LLVector3 velocity;
-	LLVector3d vel_d;
-	// Update the positions of all of the clouds
-	for (U32 i = 0; i < mCloudPuffs.size(); i++)
-	{
-		LLCloudPuff &puff = mCloudPuffs[i];
-		velocity = mCloudLayerp->getRegion()->mWind.getCloudVelocity(mCloudLayerp->getRegion()->getPosRegionFromGlobal(puff.mPositionGlobal));
-		velocity *= CLOUD_VELOCITY_SCALE*CLOUD_UPDATE_RATE;
-		vel_d.setVec(velocity);
-		mCloudPuffs[i].mPositionGlobal += vel_d;
-		mCloudPuffs[i].mAlpha += mCloudPuffs[i].mRate * dt;
-		mCloudPuffs[i].mAlpha = llmin(1.f, mCloudPuffs[i].mAlpha);
-		mCloudPuffs[i].mAlpha = llmax(0.f, mCloudPuffs[i].mAlpha);
-	}
-}
-
-void LLCloudGroup::updatePuffOwnership()
-{
-	U32 i = 0;
-	while (i < mCloudPuffs.size())
-	{
-		if (mCloudPuffs[i].getLifeState() == LL_PUFF_DYING)
-		{
-			i++;
-			continue;
-		}
-		if (inGroup(mCloudPuffs[i]))
-		{
-			i++;
-			continue;
-		}
-
-		//llinfos << "Cloud moving to new group" << llendl;
-		LLCloudGroup *new_cgp = LLWorld::getInstance()->findCloudGroup(mCloudPuffs[i]);
-		if (!new_cgp)
-		{
-			//llinfos << "Killing puff not in group" << llendl;
-			mCloudPuffs[i].setLifeState(LL_PUFF_DYING);
-			mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE;
-			i++;
-			continue;
-		}
-		//llinfos << "Puff handed off!" << llendl;
-		LLCloudPuff puff;
-		puff.mPositionGlobal = mCloudPuffs[i].mPositionGlobal;
-		puff.mAlpha = mCloudPuffs[i].mAlpha;
-		mCloudPuffs.erase(mCloudPuffs.begin() + i);
-		new_cgp->mCloudPuffs.push_back(puff);
-	}
-
-	//llinfos << "Puff count: " << LLCloudPuff::sPuffCount << llendl;
-}
-
-void LLCloudGroup::updatePuffCount()
-{
-	if (!mVOCloudsp)
-	{
-		return;
-	}
-	S32 i;
-	S32 target_puff_count = llround(CLOUD_DENSITY * mDensity);
-	target_puff_count = llmax(0, target_puff_count);
-	target_puff_count = llmin(CLOUD_COUNT_MAX, target_puff_count);
-	S32 current_puff_count = (S32) mCloudPuffs.size();
-	// Create a new cloud if we need one
-	if (current_puff_count < target_puff_count)
-	{
-		LLVector3d puff_pos_global;
-		mCloudPuffs.resize(target_puff_count);
-		for (i = current_puff_count; i < target_puff_count; i++)
-		{
-			puff_pos_global = mVOCloudsp->getPositionGlobal();
-			F32 x = ll_frand(256.f/CLOUD_GROUPS_PER_EDGE) - 128.f/CLOUD_GROUPS_PER_EDGE;
-			F32 y = ll_frand(256.f/CLOUD_GROUPS_PER_EDGE) - 128.f/CLOUD_GROUPS_PER_EDGE;
-			F32 z = ll_frand(CLOUD_HEIGHT_RANGE) - 0.5f*CLOUD_HEIGHT_RANGE;
-			puff_pos_global += LLVector3d(x, y, z);
-			mCloudPuffs[i].mPositionGlobal = puff_pos_global;
-			mCloudPuffs[i].mAlpha = 0.01f;
-			LLCloudPuff::sPuffCount++;
-		}
-	}
-
-	// Count the number of live puffs
-	S32 live_puff_count = 0;
-	for (i = 0; i < (S32) mCloudPuffs.size(); i++)
-	{
-		if (mCloudPuffs[i].getLifeState() != LL_PUFF_DYING)
-		{
-			live_puff_count++;
-		}
-	}
-
-
-	// Start killing enough puffs so the live puff count == target puff count
-	S32 new_dying_count = llmax(0, live_puff_count - target_puff_count);
-	i = 0;
-	while (new_dying_count > 0)
-	{
-		if (mCloudPuffs[i].getLifeState() != LL_PUFF_DYING)
-		{
-			//llinfos << "Killing extra live cloud" << llendl;
-			mCloudPuffs[i].setLifeState(LL_PUFF_DYING);
-			mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE;
-			new_dying_count--;
-		}
-		i++;
-	}
-
-	// Remove fully dead puffs
-	i = 0;
-	while (i < (S32) mCloudPuffs.size())
-	{
-		if (mCloudPuffs[i].isDead())
-		{
-			//llinfos << "Removing dead puff!" << llendl;
-			mCloudPuffs.erase(mCloudPuffs.begin() + i);
-			LLCloudPuff::sPuffCount--;
-		}
-		else
-		{
-			i++;
-		}
-	}
-}
-
-BOOL LLCloudGroup::inGroup(const LLCloudPuff &puff) const
-{
-	// Do min/max check on center of the cloud puff
-	F32 min_x, min_y, max_x, max_y;
-	F32 delta = 128.f/CLOUD_GROUPS_PER_EDGE;
-	min_x = mCenterRegion.mV[VX] - delta;
-	min_y = mCenterRegion.mV[VY] - delta;
-	max_x = mCenterRegion.mV[VX] + delta;
-	max_y = mCenterRegion.mV[VY] + delta;
-
-	LLVector3 pos_region = mCloudLayerp->getRegion()->getPosRegionFromGlobal(puff.getPositionGlobal());
-
-	if ((pos_region.mV[VX] < min_x)
-		|| (pos_region.mV[VY] < min_y)
-		|| (pos_region.mV[VX] > max_x)
-		|| (pos_region.mV[VY] > max_y))
-	{
-		return FALSE;
-	}
-	return TRUE;
-}
-
-LLCloudLayer::LLCloudLayer()
-: 	mOriginGlobal(0.0f, 0.0f, 0.0f),
-	mMetersPerEdge(1.0f),
-	mMetersPerGrid(1.0f),
-	mWindp(NULL),
-	mDensityp(NULL)
-{
-	S32 i, j;
-	for (i = 0; i < 4; i++)
-	{
-		mNeighbors[i] = NULL;
-	}
-
-	F32 x, y;
-	for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
-	{
-		y = (0.5f + i)*(256.f/CLOUD_GROUPS_PER_EDGE);
-		for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
-		{
-			x = (0.5f + j)*(256.f/CLOUD_GROUPS_PER_EDGE);
-
-			mCloudGroups[i][j].setCloudLayerp(this);
-			mCloudGroups[i][j].setCenterRegion(LLVector3(x, y, CLOUD_HEIGHT_MEAN));
-		}
-	}
-}
-
-
-
-LLCloudLayer::~LLCloudLayer()
-{
-	destroy();
-}
-
-
-void LLCloudLayer::create(LLViewerRegion *regionp)
-{
-	llassert(regionp);
-
-	mRegionp = regionp;
-	mDensityp = new F32 [CLOUD_GRIDS_PER_EDGE * CLOUD_GRIDS_PER_EDGE];
-
-	U32 i;
-	for (i = 0; i < CLOUD_GRIDS_PER_EDGE*CLOUD_GRIDS_PER_EDGE; i++)
-	{
-		mDensityp[i] = 0.f;
-	}
-}
-
-void LLCloudLayer::setRegion(LLViewerRegion *regionp)
-{
-	mRegionp = regionp;
-}
-
-void LLCloudLayer::destroy()
-{
-	reset();
-
-	delete [] mDensityp;
-	mDensityp = NULL;
-	mWindp = NULL;
-}
-
-
-void LLCloudLayer::reset()
-{
-	// Kill all of the existing puffs
-	S32 i, j;
-
-	for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
-	{
-		for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
-		{
-			mCloudGroups[i][j].cleanup();
-		}
-	}
-}
-
-void LLCloudLayer::setWindPointer(LLWind *windp)
-{
-	if (mWindp)
-	{
-		mWindp->setCloudDensityPointer(NULL);
-	}
-	mWindp = windp;
-	if (mWindp)
-	{
-		mWindp->setCloudDensityPointer(mDensityp);
-	}
-}
-
-
-void LLCloudLayer::setWidth(F32 width)
-{
-	mMetersPerEdge = width;
-	mMetersPerGrid = width / CLOUD_GRIDS_PER_EDGE;
-}
-
-
-F32 LLCloudLayer::getDensityRegion(const LLVector3 &pos_region)
-{	
-	// "position" is region-local
-	S32 i, j, ii, jj;
-
-	i = lltrunc(pos_region.mV[VX] / mMetersPerGrid);
-	j = lltrunc(pos_region.mV[VY] / mMetersPerGrid);
-	ii = i + 1;
-	jj = j + 1;
-
-
-	// clamp 
-	if (i >= (S32)CLOUD_GRIDS_PER_EDGE)
-	{
-		i = CLOUD_GRIDS_PER_EDGE - 1;
-		ii = i;
-	}
-	else if (i < 0)
-	{
-		i = 0;
-		ii = i;
-	}
-	else if (ii >= (S32)CLOUD_GRIDS_PER_EDGE || ii < 0)
-	{
-		ii = i;
-	}
-
-	if (j >= (S32)CLOUD_GRIDS_PER_EDGE)
-	{
-		j = CLOUD_GRIDS_PER_EDGE - 1;
-		jj = j;
-	}
-	else if (j < 0)
-	{
-		j = 0;
-		jj = j;
-	}
-	else if (jj >= (S32)CLOUD_GRIDS_PER_EDGE || jj < 0)
-	{
-		jj = j;
-	}
-
-	F32 dx = (pos_region.mV[VX] - (F32) i * mMetersPerGrid) / mMetersPerGrid;
-	F32 dy = (pos_region.mV[VY] - (F32) j * mMetersPerGrid) / mMetersPerGrid;
-	F32 omdx = 1.0f - dx;
-	F32 omdy = 1.0f - dy;
-
-	F32 density = dx * dy * *(mDensityp + ii + jj * CLOUD_GRIDS_PER_EDGE) + 
-	   			  dx * omdy * *(mDensityp + i + jj * CLOUD_GRIDS_PER_EDGE) +
-				  omdx * dy * *(mDensityp + ii + j * CLOUD_GRIDS_PER_EDGE) +
-				  omdx * omdy * *(mDensityp + i + j * CLOUD_GRIDS_PER_EDGE);	  
-
-	return density;
-}
-
-void LLCloudLayer::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp)
-{
-	LLPatchHeader  patch_header;
-
-	init_patch_decompressor(group_headerp->patch_size);
-
-	// Don't use the packed group_header stride because the strides used on
-	// simulator and viewer are not equal.
-	group_headerp->stride = group_headerp->patch_size; 		// offset required to step up one row
-	set_group_of_patch_header(group_headerp);
-
-	decode_patch_header(bitpack, &patch_header);
-	decode_patch(bitpack, gBuffer);
-	decompress_patch(mDensityp, gBuffer, &patch_header); 
-}
-
-void LLCloudLayer::updatePuffs(const F32 dt)
-{
-	// We want to iterate through all of the cloud groups
-	// and update their density targets
-
-	S32 i, j;
-	
-	for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
-	{
-		for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
-		{
-			mCloudGroups[i][j].updatePuffs(dt);
-		}
-	}
-}
-
-void LLCloudLayer::updatePuffOwnership()
-{
-	S32 i, j;
-	
-	for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
-	{
-		for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
-		{
-			mCloudGroups[i][j].updatePuffOwnership();
-		}
-	}
-}
-
-void LLCloudLayer::updatePuffCount()
-{
-	S32 i, j;
-	
-	for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
-	{
-		for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
-		{
-			mCloudGroups[i][j].updatePuffCount();
-		}
-	}
-}
-
-LLCloudGroup *LLCloudLayer::findCloudGroup(const LLCloudPuff &puff)
-{
-	S32 i, j;
-	
-	for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
-	{
-		for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
-		{
-			if (mCloudGroups[i][j].inGroup(puff))
-			{
-				return &(mCloudGroups[i][j]);
-			}
-		}
-	}
-	return NULL;
-}
-
-
-
-void LLCloudLayer::connectNeighbor(LLCloudLayer *cloudp, U32 direction)
-{
-	if (direction >= 4)
-	{
-		// Only care about cardinal 4 directions.
-		return;
-	}
-
-	mNeighbors[direction] = cloudp;
-	if (cloudp)
-		mNeighbors[direction]->mNeighbors[gDirOpposite[direction]] = this;
-}
-
-
-void LLCloudLayer::disconnectNeighbor(U32 direction)
-{
-	if (direction >= 4)
-	{
-		// Only care about cardinal 4 directions.
-		return;
-	}
-
-	if (mNeighbors[direction])
-	{
-		mNeighbors[direction]->mNeighbors[gDirOpposite[direction]] = NULL;
-		mNeighbors[direction] = NULL;
-	}
-}
-
-
-void LLCloudLayer::disconnectAllNeighbors()
-{
-	S32 i;
-	for (i = 0; i < 4; i++)
-	{
-		disconnectNeighbor(i);
-	}
-}
diff --git a/indra/newview/llcloud.h b/indra/newview/llcloud.h
deleted file mode 100644
index 0435ba1ece4b12e3b7ca7a0ef8022da2626cdd52..0000000000000000000000000000000000000000
--- a/indra/newview/llcloud.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/** 
- * @file llcloud.h
- * @brief Description of viewer LLCloudLayer 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_LLCLOUD_H
-#define LL_LLCLOUD_H
-
-// Some ideas on how clouds should work
-//
-// Each region has a cloud layer
-// Each cloud layer has pre-allocated space for N clouds
-// The LLSky class knows the max number of clouds to render M.
-// All clouds use the same texture, but the tex-coords can take on 8 configurations 
-// (four rotations, front and back)
-// 
-// The sky's part
-// --------------
-// The sky knows that A clouds have been assigned to regions and there are B left over. 
-// Divide B by number of active regions to get C.
-// Ask each region to add C more clouds and return total number D.
-// Add up all the D's to get a new A.
-//
-// The cloud layer's part
-// ----------------------
-// The cloud layer is a grid of possibility.  Each grid's value represents the probablility
-// (0.0 to 1.0) that a cloud placement query will succeed.  
-//
-// The sky asks the region to add C more clouds.
-// The cloud layer tries a total of E times to place clouds and returns total cloud count.
-// 
-// Clouds move according to local wind velocity.
-// If a cloud moves out of region then it's location is sent to neighbor region
-// or it is allowed to drift and decay.
-//
-// The clouds in non-visible regions do not propagate every frame.
-// Each frame one non-visible region is allowed to propagate it's clouds 
-// (might have to check to see if incoming cloud was already visible or not).
-//
-// 
-
-#include "llmath.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v3dmath.h"
-#include "v4math.h"
-#include "v4color.h"
-#include "llpointer.h"
-#include "lldarray.h"
-
-#include "llframetimer.h"
-
-const U32 CLOUD_GRIDS_PER_EDGE 			= 16;
-
-const F32 CLOUD_PUFF_WIDTH	= 64.f;
-const F32 CLOUD_PUFF_HEIGHT	= 48.f;
-
-class LLWind;
-class LLVOClouds;
-class LLViewerRegion;
-class LLCloudLayer;
-class LLBitPack;
-class LLGroupHeader;
-
-const S32 CLOUD_GROUPS_PER_EDGE = 4;
-
-class LLCloudPuff
-{
-public:
-	LLCloudPuff();
-
-	const LLVector3d &getPositionGlobal() const		{ return mPositionGlobal; }
-	friend class LLCloudGroup;
-
-	void updatePuffs(const F32 dt);
-	void updatePuffOwnership();
-
-	F32 getAlpha() const							{ return mAlpha; }
-	U32 getLifeState() const						{ return mLifeState; }
-	void setLifeState(const U32 state)				{ mLifeState = state; }
-	BOOL isDead() const								{ return mAlpha <= 0.f; }	
-
-
-	static S32	sPuffCount;
-protected:
-	F32			mAlpha;
-	F32			mRate;
-	LLVector3d	mPositionGlobal;
-
-	BOOL		mLifeState;
-};
-
-class LLCloudGroup
-{
-public:
-	LLCloudGroup();
-
-	void cleanup();
-
-	void setCloudLayerp(LLCloudLayer *clp)			{ mCloudLayerp = clp; }
-	void setCenterRegion(const LLVector3 &center);
-
-	void updatePuffs(const F32 dt);
-	void updatePuffOwnership();
-	void updatePuffCount();
-
-	BOOL inGroup(const LLCloudPuff &puff) const;
-
-	F32 getDensity() const							{ return mDensity; }
-	S32 getNumPuffs() const							{ return (S32) mCloudPuffs.size(); }
-	const LLCloudPuff &getPuff(const S32 i)			{ return mCloudPuffs[i]; }
-protected:
-	LLCloudLayer *mCloudLayerp;
-	LLVector3 mCenterRegion;
-	F32 mDensity;
-	S32 mTargetPuffCount;
-
-	std::vector<LLCloudPuff> mCloudPuffs;
-	LLPointer<LLVOClouds> mVOCloudsp;
-};
-
-
-class LLCloudLayer
-{
-public:
-	LLCloudLayer();
-	~LLCloudLayer();
-
-	void create(LLViewerRegion *regionp);
-	void destroy();
-
-	void reset();						// Clears all active cloud puffs
-
-
-	void updatePuffs(const F32 dt);
-	void updatePuffOwnership();
-	void updatePuffCount();
-
-	LLCloudGroup *findCloudGroup(const LLCloudPuff &puff);
-
-	void setRegion(LLViewerRegion *regionp);
-	LLViewerRegion* getRegion() const						{ return mRegionp; }
-	void setWindPointer(LLWind *windp);
-	void setOriginGlobal(const LLVector3d &origin_global)	{ mOriginGlobal = origin_global; }
-	void setWidth(F32 width);
-
-	void setBrightness(F32 brightness);
-	void setSunColor(const LLColor4 &color);
-
-	F32 getDensityRegion(const LLVector3 &pos_region);		// "position" is in local coordinates
-
-	void decompress(LLBitPack &bitpack, LLGroupHeader *group_header);
-
-	LLCloudLayer* getNeighbor(const S32 n) const					{ return mNeighbors[n]; }
-
-	void connectNeighbor(LLCloudLayer *cloudp, U32 direction);
-	void disconnectNeighbor(U32 direction);
-	void disconnectAllNeighbors();
-
-public:
-	LLVector3d 	mOriginGlobal;
-	F32			mMetersPerEdge;
-	F32			mMetersPerGrid;
-
-
-	F32 mMaxAlpha;						// The max cloud puff _render_ alpha
-
-protected:
-	LLCloudLayer		*mNeighbors[4];
-	LLWind				*mWindp;
-	LLViewerRegion		*mRegionp;
-	F32 				*mDensityp;			// the probability density grid
-	
-	LLCloudGroup		mCloudGroups[CLOUD_GROUPS_PER_EDGE][CLOUD_GROUPS_PER_EDGE];
-};
-
-
-#endif
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index bdc12ec0e3c384ca6003dde4477a62c00bf64ba1..8f7b992093bc42f6fbb087cb3c03a6640ba35790 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -385,7 +385,6 @@ void LLDrawable::makeActive()
 			pcode == LLViewerObject::LL_VO_SURFACE_PATCH ||
 			pcode == LLViewerObject::LL_VO_PART_GROUP ||
 			pcode == LLViewerObject::LL_VO_HUD_PART_GROUP ||
-			pcode == LLViewerObject::LL_VO_CLOUDS ||
 			pcode == LLViewerObject::LL_VO_GROUND ||
 			pcode == LLViewerObject::LL_VO_SKY)
 		{
@@ -1513,10 +1512,6 @@ BOOL LLDrawable::isAnimating() const
 	{
 		return TRUE;
 	}
-	if (mVObjp->getPCode() == LLViewerObject::LL_VO_CLOUDS)
-	{
-		return TRUE;
-	}
 
 	if (!isRoot() && !mVObjp->getAngularVelocity().isExactlyZero())
 	{
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index 25e4bc847c253dcfd41423ef3575751c21c073c5..08b31d687b909266404c7356cc95b8e3d3a63697 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -35,7 +35,6 @@
 #include "lldrawpoolalpha.h"
 #include "lldrawpoolavatar.h"
 #include "lldrawpoolbump.h"
-#include "lldrawpoolclouds.h"
 #include "lldrawpoolground.h"
 #include "lldrawpoolsimple.h"
 #include "lldrawpoolsky.h"
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 8b5a2ce78182d6e4147c73cb09430aaae7453f88..9fb7968d967fbc44a96c38f7e924587d6c28766b 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -357,7 +357,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 			bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow.
 				// All particle systems seem to come off the wire with texture entries which claim that they glow.  This is probably a bug in the data.  Suppress.
 				group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_PARTICLE &&
-				group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_CLOUD &&
 				group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD_PARTICLE;
 
 			LLSpatialGroup::drawmap_elem_t& draw_info = group->mDrawMap[LLRenderPass::PASS_ALPHA];
diff --git a/indra/newview/lldrawpoolclouds.cpp b/indra/newview/lldrawpoolclouds.cpp
deleted file mode 100644
index 5db1d8cfedafb9e84d9d332b2ea0f1d3a061c631..0000000000000000000000000000000000000000
--- a/indra/newview/lldrawpoolclouds.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/** 
- * @file lldrawpoolclouds.cpp
- * @brief LLDrawPoolClouds class implementation
- *
- * $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 "llviewerprecompiledheaders.h"
-
-#include "lldrawpoolclouds.h"
-
-#include "llface.h"
-#include "llsky.h"
-#include "llviewercamera.h"
-#include "llvoclouds.h"
-#include "pipeline.h"
-
-LLDrawPoolClouds::LLDrawPoolClouds() :
-	LLDrawPool(POOL_CLOUDS)
-{
-}
-
-LLDrawPool *LLDrawPoolClouds::instancePool()
-{
-	return new LLDrawPoolClouds();
-}
-
-BOOL LLDrawPoolClouds::addFace(LLFace* face)
-{
-	llerrs << "WTF?" << llendl;
-	return FALSE;
-}
-
-void LLDrawPoolClouds::enqueue(LLFace *facep)
-{
-	mDrawFace.push_back(facep);
-	facep->mDistance = (facep->mCenterAgent - gCamera->getOrigin()) * gCamera->getAtAxis();
-}
-
-void LLDrawPoolClouds::beginRenderPass(S32 pass)
-{
-	glEnableClientState(GL_VERTEX_ARRAY);
-	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-	glEnableClientState(GL_NORMAL_ARRAY);
-}
-
-void LLDrawPoolClouds::prerender()
-{
-	mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
-}
-
-void LLDrawPoolClouds::render(S32 pass)
-{
-	LLFastTimer ftm(LLFastTimer::FTM_RENDER_CLOUDS);
- 	if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
-	{
-		return;
-	}
-	
-	if (mDrawFace.empty())
-	{
-		return;
-	}
-
-	LLGLSPipelineAlpha gls_pipeline_alpha;
-	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
-	glAlphaFunc(GL_GREATER,0.01f);
-
-	gPipeline.enableLightsFullbright(LLColor4(1.f,1.f,1.f));
-
-	mDrawFace[0]->bindTexture();
-
-	std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
-
-	drawLoop();
-}
-
-
diff --git a/indra/newview/lldrawpoolclouds.h b/indra/newview/lldrawpoolclouds.h
deleted file mode 100644
index 019f11a7953a8b51c115ad5df58ec27e76968b8d..0000000000000000000000000000000000000000
--- a/indra/newview/lldrawpoolclouds.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/** 
- * @file lldrawpoolclouds.h
- * @brief LLDrawPoolClouds class definition
- *
- * $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_LLDRAWPOOLCLOUDS_H
-#define LL_LLDRAWPOOLCLOUDS_H
-
-#include "lldrawpool.h"
-
-class LLDrawPoolClouds : public LLDrawPool
-{
-public:
-	enum
-	{
-		VERTEX_DATA_MASK =	LLVertexBuffer::MAP_VERTEX |
-							LLVertexBuffer::MAP_NORMAL |
-							LLVertexBuffer::MAP_TEXCOORD0
-	};
-
-	BOOL addFace(LLFace* face);
-	virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
-
-	LLDrawPoolClouds();
-
-	/*virtual*/ void prerender();
-	/*virtual*/ LLDrawPool *instancePool();
-	/*virtual*/ void enqueue(LLFace *face);
-	/*virtual*/ void beginRenderPass(S32 pass);
-	/*virtual*/ void render(S32 pass = 0);
-};
-
-#endif // LL_LLDRAWPOOLSKY_H
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index fa329eb0ae0271807132e0a46f576214dd5ebbd3..cb82ad320963734c2337737daa80c02142b77c38 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -2818,7 +2818,7 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE)
 						gGL.color4f(0,1,1,1);
 						break;
 				case LLViewerObject::LL_VO_CLOUDS:
-						gGL.color4f(0.5f,0.5f,0.5f,1.0f);
+						// no longer used
 						break;
 				case LLViewerObject::LL_VO_PART_GROUP:
 				case LLViewerObject::LL_VO_HUD_PART_GROUP:
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 0d9cad914a55755344cc062719da89ec364a05d7..bc2bcd7c1d998ce6acc781e7cac42f6757a56b96 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -662,13 +662,6 @@ class LLGrassPartition : public LLParticlePartition
 	LLGrassPartition();
 };
 
-//spatial partition for clouds (implemented in LLVOClouds.cpp)
-class LLCloudPartition : public LLParticlePartition
-{
-public:
-	LLCloudPartition();
-};
-
 //class for wrangling geometry out of volumes (implemented in LLVOVolume.cpp)
 class LLVolumeGeometryManager: public LLGeometryManager
 {
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index c6b73dae132831d62399d7296f00eafae2e86ba3..34614a4b78d5170e6a9760522bd43a821b572fde 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -163,7 +163,6 @@
 #include "llviewerwindow.h"
 #include "llvoavatar.h"
 #include "llvoavatarself.h"
-#include "llvoclouds.h"
 #include "llweb.h"
 #include "llworld.h"
 #include "llworldmapmessage.h"
@@ -3149,11 +3148,6 @@ bool process_login_success_response()
 			gMoonTextureID = id;
 		}
 
-		id = global_textures["cloud_texture_id"];
-		if(id.notNull())
-		{
-			gCloudTextureID = id;
-		}
 	}
 
 	// Set the location of the snapshot sharing config endpoint
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 6d493bfcd56f525843fb8a516635dcb11558e37c..c8ecd2577bd6e1ca57efdb828797d84d5159d5ca 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -81,7 +81,6 @@
 #include "llviewerwindow.h" // For getSpinAxis
 #include "llvoavatar.h"
 #include "llvoavatarself.h"
-#include "llvoclouds.h"
 #include "llvograss.h"
 #include "llvoground.h"
 #include "llvolume.h"
@@ -169,8 +168,6 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
 	  res = NULL; break;
 	case LL_PCODE_LEGACY_TEXT_BUBBLE:
 	  res = new LLVOTextBubble(id, pcode, regionp); break;
-	case LL_VO_CLOUDS:
-	  res = new LLVOClouds(id, pcode, regionp); break;
 	case LL_VO_SURFACE_PATCH:
 	  res = new LLVOSurfacePatch(id, pcode, regionp); break;
 	case LL_VO_SKY:
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index e417343becb07402ec4755c4fd80ca198b260cfe..ed31fd947722dd1bcfb341fc79cb9221d24da161 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -546,7 +546,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	//
 	typedef enum e_vo_types
 	{
-		LL_VO_CLOUDS =				LL_PCODE_APP | 0x20,
+		LL_VO_CLOUDS =				LL_PCODE_APP | 0x20, // no longer used
 		LL_VO_SURFACE_PATCH =		LL_PCODE_APP | 0x30,
 		LL_VO_WL_SKY =				LL_PCODE_APP | 0x40,
 		LL_VO_SQUARE_TORUS =		LL_PCODE_APP | 0x50,
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index ab2e07e4df010b7cc2a9dbe9027dadc8810e567d..acacf63a1fbe52cd42b065e867472fb541ca61a7 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -957,8 +957,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
 			iter != idle_list.end(); iter++)
 		{
 			objectp = *iter;
-			if (objectp->getPCode() == LLViewerObject::LL_VO_CLOUDS ||
-				objectp->isAvatar())
+			if (objectp->isAvatar())
 			{
 				objectp->idleUpdate(agent, world, frame_time);
 			}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 214db0399479c01f2c6e3381868ca73dc8196d6f..6f4dff5819994f36a4023c6e6a5a25ec27aee7d5 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -64,7 +64,6 @@
 #include "llvlmanager.h"
 #include "llvlcomposition.h"
 #include "llvocache.h"
-#include "llvoclouds.h"
 #include "llworld.h"
 #include "llspatialpartition.h"
 #include "stringize.h"
@@ -314,7 +313,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
 	mImpl->mObjectPartition.push_back(new LLWaterPartition());		//PARTITION_WATER
 	mImpl->mObjectPartition.push_back(new LLTreePartition());		//PARTITION_TREE
 	mImpl->mObjectPartition.push_back(new LLParticlePartition());	//PARTITION_PARTICLE
-	mImpl->mObjectPartition.push_back(new LLCloudPartition());		//PARTITION_CLOUD
 	mImpl->mObjectPartition.push_back(new LLGrassPartition());		//PARTITION_GRASS
 	mImpl->mObjectPartition.push_back(new LLVolumePartition());	//PARTITION_VOLUME
 	mImpl->mObjectPartition.push_back(new LLBridgePartition());	//PARTITION_BRIDGE
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 4bc487e4cb78cf4a383ee14b06cfa9da25024abb..c8e9085707815d5c9903b91334d0b8875f891998 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -81,7 +81,6 @@ class LLViewerRegion: public LLCapabilityProvider // implements this interface
 		PARTITION_WATER,
 		PARTITION_TREE,
 		PARTITION_PARTICLE,
-		PARTITION_CLOUD,
 		PARTITION_GRASS,
 		PARTITION_VOLUME,
 		PARTITION_BRIDGE,
diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp
deleted file mode 100644
index 78aa6e6ab8a5fa6b4365a5a7b96f98b5a67e9cb5..0000000000000000000000000000000000000000
--- a/indra/newview/llvoclouds.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-/** 
- * @file llvoclouds.cpp
- * @brief Implementation of LLVOClouds class which is a derivation fo LLViewerObject
- *
- * $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$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llvoclouds.h"
-
-#include "lldrawpoolalpha.h"
-
-#include "llviewercontrol.h"
-
-#include "llagent.h"		// to get camera position
-#include "lldrawable.h"
-#include "llface.h"
-#include "llprimitive.h"
-#include "llsky.h"
-#include "llviewercamera.h"
-#include "llviewertexturelist.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llvosky.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llspatialpartition.h"
-
-LLUUID gCloudTextureID = IMG_CLOUD_POOF;
-
-
-LLVOClouds::LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-:	LLAlphaObject(id, LL_VO_CLOUDS, regionp)
-{
-	mCloudGroupp = NULL;
-	mbCanSelect = FALSE;
-	setNumTEs(1);
-	LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(gCloudTextureID);
-	image->setBoostLevel(LLViewerTexture::BOOST_CLOUDS);
-	setTEImage(0, image);
-}
-
-
-LLVOClouds::~LLVOClouds()
-{
-}
-
-
-BOOL LLVOClouds::isActive() const
-{
-	return TRUE;
-}
-
-BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
-{
-	static LLFastTimer::DeclareTimer ftm("Idle Clouds");
-	LLFastTimer t(ftm);
-
-	if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
-	{
-		return TRUE;
-	}
-	
-	// Set dirty flag (so renderer will rebuild primitive)
-	if (mDrawable)
-	{
-		gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
-	}
-
-	return TRUE;
-}
-
-
-void LLVOClouds::setPixelAreaAndAngle(LLAgent &agent)
-{
-	mAppAngle = 50;
-	mPixelArea = 1500*100;
-}
-
-void LLVOClouds::updateTextures()
-{
-	getTEImage(0)->addTextureStats(mPixelArea);
-}
-
-LLDrawable* LLVOClouds::createDrawable(LLPipeline *pipeline)
-{
-	pipeline->allocDrawable(this);
-	mDrawable->setLit(FALSE);
-	mDrawable->setRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
-
-	return mDrawable;
-}
-
-static LLFastTimer::DeclareTimer FTM_UPDATE_CLOUDS("Update Clouds");
-
-BOOL LLVOClouds::updateGeometry(LLDrawable *drawable)
-{
-	LLFastTimer ftm(FTM_UPDATE_CLOUDS);
-	if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
-	{
-		return TRUE;
-	}
-	
-	if (drawable->isVisible())
-	{
-		dirtySpatialGroup(TRUE);
-	}
-
-	LLFace *facep;
-	
-	S32 num_faces = mCloudGroupp->getNumPuffs();
-
-	if (num_faces > drawable->getNumFaces())
-	{
-		drawable->setNumFacesFast(num_faces, NULL, getTEImage(0));
-	}
-
-	mDepth = (getPositionAgent()-LLViewerCamera::getInstance()->getOrigin())*LLViewerCamera::getInstance()->getAtAxis();
-
-	S32 face_indx = 0;
-	for ( ;	face_indx < num_faces; face_indx++)
-	{
-		facep = drawable->getFace(face_indx);
-		if (!facep)
-		{
-			llwarns << "No facep for index " << face_indx << llendl;
-			continue;
-		}
-
-		facep->setSize(4, 6);
-		
-		facep->setTEOffset(face_indx);
-		facep->setTexture(getTEImage(0));
-		const LLCloudPuff &puff = mCloudGroupp->getPuff(face_indx);
-		const LLVector3 puff_pos_agent = gAgent.getPosAgentFromGlobal(puff.getPositionGlobal());
-		facep->mCenterLocal = puff_pos_agent;
-		/// Update cloud color based on sun color.
-		LLColor4 float_color(LLColor3(gSky.getSunDiffuseColor() + gSky.getSunAmbientColor()),puff.getAlpha());
-		facep->setFaceColor(float_color);
-	}
-	for ( ; face_indx < drawable->getNumFaces(); face_indx++)
-	{
-		facep = drawable->getFace(face_indx);
-		if (!facep)
-		{
-			llwarns << "No facep for index " << face_indx << llendl;
-			continue;
-		}
-
-		facep->setTEOffset(face_indx);
-		facep->setSize(0,0);
-	}
-
-	drawable->movePartition();
-
-	return TRUE;
-}
-
-F32 LLVOClouds::getPartSize(S32 idx)
-{
-	return (CLOUD_PUFF_HEIGHT+CLOUD_PUFF_WIDTH)*0.5f;
-}
-
-void LLVOClouds::getGeometry(S32 te, 
-							LLStrider<LLVector3>& verticesp, 
-							LLStrider<LLVector3>& normalsp, 
-							LLStrider<LLVector2>& texcoordsp, 
-							LLStrider<LLColor4U>& colorsp, 
-							LLStrider<U16>& indicesp)
-{
-
-	if (te >= mCloudGroupp->getNumPuffs())
-	{
-		return;
-	}
-
-	LLDrawable* drawable = mDrawable;
-	LLFace *facep = drawable->getFace(te);
-
-	if (!facep->hasGeometry())
-	{
-		return;
-	}
-	
-	LLVector3 normal(0.f,0.f,-1.f);
-
-	const LLCloudPuff &puff = mCloudGroupp->getPuff(te);
-	S32 index_offset = facep->getGeomIndex();
-	LLColor4 float_color(LLColor3(gSky.getSunDiffuseColor() + gSky.getSunAmbientColor()),puff.getAlpha());
-	LLColor4U color;
-	color.setVec(float_color);
-	facep->setFaceColor(float_color);
-		
-	
-	LLVector3 up;
-	LLVector3 right;
-	LLVector3 at;
-
-	const LLVector3& puff_pos_agent = facep->mCenterLocal;
-	LLVector2 uvs[4];
-
-	uvs[0].setVec(0.f, 1.f);
-	uvs[1].setVec(0.f, 0.f);
-	uvs[2].setVec(1.f, 1.f);
-	uvs[3].setVec(1.f, 0.f);
-
-	LLVector3 vtx[4];
-
-	at = LLViewerCamera::getInstance()->getAtAxis();
-	right = at % LLVector3(0.f, 0.f, 1.f);
-	right.normVec();
-	up = right % at;
-	up.normVec();
-	right *= 0.5f*CLOUD_PUFF_WIDTH;
-	up *= 0.5f*CLOUD_PUFF_HEIGHT;;
-		
-	*colorsp++ = color;
-	*colorsp++ = color;
-	*colorsp++ = color;
-	*colorsp++ = color;
-
-	vtx[0] = puff_pos_agent - right + up;
-	vtx[1] = puff_pos_agent - right - up;
-	vtx[2] = puff_pos_agent + right + up;
-	vtx[3] = puff_pos_agent + right - up;
-
-	*verticesp++  = vtx[0];
-	*verticesp++  = vtx[1];
-	*verticesp++  = vtx[2];
-	*verticesp++  = vtx[3];
-
-	*texcoordsp++ = uvs[0];
-	*texcoordsp++ = uvs[1];
-	*texcoordsp++ = uvs[2];
-	*texcoordsp++ = uvs[3];
-
-	*normalsp++   = normal;
-	*normalsp++   = normal;
-	*normalsp++   = normal;
-	*normalsp++   = normal;
-
-	*indicesp++ = index_offset + 0;
-	*indicesp++ = index_offset + 1;
-	*indicesp++ = index_offset + 2;
-
-	*indicesp++ = index_offset + 1;
-	*indicesp++ = index_offset + 3;
-	*indicesp++ = index_offset + 2;
-}
-
-U32 LLVOClouds::getPartitionType() const
-{
-	return LLViewerRegion::PARTITION_CLOUD;
-}
-
-// virtual
-void LLVOClouds::updateDrawable(BOOL force_damped)
-{
-	// Force an immediate rebuild on any update
-	if (mDrawable.notNull())
-	{
-		mDrawable->updateXform(TRUE);
-		gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);
-	}
-	clearChanged(SHIFTED);
-}
-
-LLCloudPartition::LLCloudPartition()
-{
-	mDrawableType = LLPipeline::RENDER_TYPE_CLOUDS;
-	mPartitionType = LLViewerRegion::PARTITION_CLOUD;
-}
-
diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h
deleted file mode 100644
index 430923a1088b3145433e772dce51ea6ad86b9074..0000000000000000000000000000000000000000
--- a/indra/newview/llvoclouds.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/** 
- * @file llvoclouds.h
- * @brief Description of LLVOClouds 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_LLVOCLOUDS_H
-#define LL_LLVOCLOUDS_H
-
-#include "llviewerobject.h"
-#include "lltable.h"
-#include "v4coloru.h"
-
-class LLViewerTexture;
-class LLViewerCloudGroup;
-
-class LLCloudGroup;
-
-
-class LLVOClouds : public LLAlphaObject
-{
-public:
-	LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp );
-
-	// Initialize data that's only inited once per class.
-	static void initClass();
-
-	void updateDrawable(BOOL force_damped); 
-
-	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
-	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
-	/*virtual*/ void		getGeometry(S32 te, 
-							LLStrider<LLVector3>& verticesp, 
-							LLStrider<LLVector3>& normalsp, 
-							LLStrider<LLVector2>& texcoordsp, 
-							LLStrider<LLColor4U>& colorsp, 
-							LLStrider<U16>& indicesp);
-
-	/*virtual*/ BOOL    isActive() const; // Whether this object needs to do an idleUpdate.
-	F32 getPartSize(S32 idx);
-
-	/*virtual*/ void updateTextures();
-	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
-	
-	void updateFaceSize(S32 idx) { }
-	BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
-
-	virtual U32 getPartitionType() const;
-
-	void setCloudGroup(LLCloudGroup *cgp)		{ mCloudGroupp = cgp; }
-protected:
-	virtual ~LLVOClouds();
-
-	LLCloudGroup *mCloudGroupp;
-};
-
-extern LLUUID gCloudTextureID;
-
-#endif // LL_VO_CLOUDS_H
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 596ab5931c66006419d398dcd6eaec6745bc3306..c42d13db357e6114c68601995d9bcbdb866ac755 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -61,7 +61,6 @@
 #include <map>
 #include <cstring>
 
-#define TMP_WL_REMOVE_CLOUDS /* disables code for classic clouds */
 
 //
 // Globals
@@ -94,10 +93,6 @@ LLWorld::LLWorld() :
 	mLastPacketsOut(0),
 	mLastPacketsLost(0),
 	mSpaceTimeUSec(0)
-#ifndef TMP_WL_REMOVE_CLOUDS
-	,
-	mClassicCloudsEnabled(FALSE)
-#endif
 {
 	for (S32 i = 0; i < 8; i++)
 	{
@@ -188,12 +183,6 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
 		llerrs << "Unable to create new region!" << llendl;
 	}
 
-#ifndef TMP_WL_REMOVE_CLOUDS
-	regionp->mCloudLayer.create(regionp);
-	regionp->mCloudLayer.setWidth((F32)mWidth);
-	regionp->mCloudLayer.setWindPointer(&regionp->mWind);
-#endif // TMP_WL_REMOVE_CLOUDS
-	
 	mRegionList.push_back(regionp);
 	mActiveRegionList.push_back(regionp);
 	mCulledRegionList.push_back(regionp);
@@ -668,65 +657,6 @@ void LLWorld::updateParticles()
 	LLViewerPartSim::getInstance()->updateSimulation();
 }
 
-#ifndef TMP_WL_REMOVE_CLOUDS
-void LLWorld::updateClouds(const F32 dt)
-{
-	static LLFastTimer::DeclareTimer ftm("World Clouds");
-	LLFastTimer t(ftm);
-
-	if ( gSavedSettings.getBOOL("FreezeTime") )
-	{
-		// don't move clouds in snapshot mode
-		return;
-	}
-
-	if (mActiveRegionList.size())
-	{
-		for (region_list_t::iterator iter = mActiveRegionList.begin();
-			 iter != mActiveRegionList.end(); ++iter)
-		{
-			LLViewerRegion* regionp = *iter;
-			regionp->mCloudLayer.updatePuffs(dt);
-		}
-
-		// Reshuffle who owns which puffs
-		for (region_list_t::iterator iter = mActiveRegionList.begin();
-			 iter != mActiveRegionList.end(); ++iter)
-		{
-			LLViewerRegion* regionp = *iter;
-			regionp->mCloudLayer.updatePuffOwnership();
-		}
-
-		// Add new puffs
-		for (region_list_t::iterator iter = mActiveRegionList.begin();
-			 iter != mActiveRegionList.end(); ++iter)
-		{
-			LLViewerRegion* regionp = *iter;
-			regionp->mCloudLayer.updatePuffCount();
-		}
-	}
-}
-
-LLCloudGroup* LLWorld::findCloudGroup(const LLCloudPuff &puff)
-{
-	if (mActiveRegionList.size())
-	{
-		// Update all the cloud puff positions, and timer based stuff
-		// such as death decay
-		for (region_list_t::iterator iter = mActiveRegionList.begin();
-			 iter != mActiveRegionList.end(); ++iter)
-		{
-			LLViewerRegion* regionp = *iter;
-			LLCloudGroup *groupp = regionp->mCloudLayer.findCloudGroup(puff);
-			if (groupp)
-			{
-				return groupp;
-			}
-		}
-	}
-	return NULL;
-}
-#endif // TMP_WL_REMOVE_CLOUDS
 
 void LLWorld::renderPropertyLines()
 {