diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index eb1fb6899152cb862d06c870eed9566124911030..b1aec807ee0d45663ea30fc452d2490be1a87d41 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -2,6 +2,7 @@
 
 include(BerkeleyDB)
 include(Linking)
+include(Prebuilt)
 
 set(APR_FIND_QUIETLY ON)
 set(APR_FIND_REQUIRED ON)
@@ -12,6 +13,7 @@ set(APRUTIL_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindAPR)
 else (STANDALONE)
+  use_prebuilt_binary(apr_suite)
   if (WINDOWS)
     set(WINLIBS_PREBUILT_DEBUG_DIR 
       ${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
index 895881141a2333fbb519207ed9436fb41184bf82..c6ccab26133b9c7963f0e1f1ce3e358571298fd7 100644
--- a/indra/cmake/Audio.cmake
+++ b/indra/cmake/Audio.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 if (STANDALONE)
   include(FindPkgConfig)
@@ -7,6 +8,7 @@ if (STANDALONE)
   pkg_check_modules(VORBISENC REQUIRED vorbisenc)
   pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
 else (STANDALONE)
+  use_prebuilt_binary(ogg-vorbis)
   set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
   set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
   set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 40f23eb8cac917018339d0f63832dfe4147c5864..c7df87177e88eb18b02c2d4a2bc01bdc1692f717 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(Boost_FIND_QUIETLY ON)
 set(Boost_FIND_REQUIRED ON)
@@ -10,6 +11,7 @@ if (STANDALONE)
   set(BOOST_REGEX_LIBRARY boost_regex-mt)
   set(BOOST_SIGNALS_LIBRARY boost_signals-mt)
 else (STANDALONE)
+  use_prebuilt_binary(boost)
   set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
 
   if (WINDOWS)
diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake
index 4dfcf588c607565302400a9d36f759abf9538de2..68fabc34933c9eccc95313e9fe7a207c23a7fd2b 100644
--- a/indra/cmake/CARes.cmake
+++ b/indra/cmake/CARes.cmake
@@ -1,5 +1,6 @@
 # -*- cmake -*-
 include(Linking)
+include(Prebuilt)
 
 set(CARES_FIND_QUIETLY ON)
 set(CARES_FIND_REQUIRED ON)
@@ -7,6 +8,7 @@ set(CARES_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindCARes)
 else (STANDALONE)
+    use_prebuilt_binary(ares)
     if (WINDOWS)
         set(CARES_LIBRARIES areslib)
     elseif (DARWIN)
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
index bce4a85d167a10110bb8fd8e0a3ff94c724ef69b..6e5fed4d5285e473d121d367c4da18ee15f76b18 100644
--- a/indra/cmake/CURL.cmake
+++ b/indra/cmake/CURL.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(CURL_FIND_QUIETLY ON)
 set(CURL_FIND_REQUIRED ON)
@@ -6,6 +7,7 @@ set(CURL_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindCURL)
 else (STANDALONE)
+  use_prebuilt_binary(curl)
   if (WINDOWS)
     set(CURL_LIBRARIES 
     debug libcurld
diff --git a/indra/cmake/ELFIO.cmake b/indra/cmake/ELFIO.cmake
index 2805842cbc22522b059729c0f3fb82931d5f3df5..e420ce27bb34f0fc09275d5677467782480eb6f2 100644
--- a/indra/cmake/ELFIO.cmake
+++ b/indra/cmake/ELFIO.cmake
@@ -1,10 +1,12 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(ELFIO_FIND_QUIETLY ON)
 
 if (STANDALONE)
   include(FindELFIO)
 elseif (LINUX)
+  use_prebuilt_binary(elfio)
   set(ELFIO_LIBRARIES ELFIO)
   set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
 endif (STANDALONE)
diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake
index 3010d6353237974da004d6b689b58618f65a6610..acb15dc623dffce82fddd142467237f67938202f 100644
--- a/indra/cmake/EXPAT.cmake
+++ b/indra/cmake/EXPAT.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(EXPAT_FIND_QUIETLY ON)
 set(EXPAT_FIND_REQUIRED ON)
@@ -6,6 +7,7 @@ set(EXPAT_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindEXPAT)
 else (STANDALONE)
+    use_prebuilt_binary(expat)
     if (WINDOWS)
         set(EXPAT_LIBRARIES libexpatMT)
     else (WINDOWS)
diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake
index 781c8babbefe31f284d67610fec3cc0582d13efc..258fd6bf6643e1f0b80ca36d3c86d686a1f73dcc 100644
--- a/indra/cmake/FMOD.cmake
+++ b/indra/cmake/FMOD.cmake
@@ -1,4 +1,7 @@
 # -*- cmake -*-
+include(Prebuilt)
+
+use_prebuilt_binary(fmod)
 
 find_library(FMOD_LIBRARY
              NAMES fmod fmodvc fmod-3.75
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 064135bcd1b3a3ba9c5832b815b4330346b58af1..5f1aa26e89169d1dc42550cbf7b26545b3e7ee35 100644
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -1,10 +1,12 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 if (STANDALONE)
   include(FindPkgConfig)
 
   pkg_check_modules(FREETYPE REQUIRED freetype2)
 else (STANDALONE)
+  use_prebuilt_binary(freetype)
   if (LINUX)
     set(FREETYPE_INCLUDE_DIRS
         ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake
index 61a2631a081977446c75a9f41783f9723c1ca704..9b3eca060fc5363cfc24d1cbcacae064410c7ceb 100644
--- a/indra/cmake/GooglePerfTools.cmake
+++ b/indra/cmake/GooglePerfTools.cmake
@@ -1,8 +1,10 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 if (STANDALONE)
   include(FindGooglePerfTools)
 else (STANDALONE)
+  use_prebuilt_binary(google)
   if (LINUX)
     set(TCMALLOC_LIBRARIES tcmalloc)
     set(STACKTRACE_LIBRARIES stacktrace)
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
index 18bdd8bc465b11e3fef61884f99eff4c93a2b6be..8047718f39931be52b0b34168f68ae2b93ec2fb6 100644
--- a/indra/cmake/JPEG.cmake
+++ b/indra/cmake/JPEG.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 include(Linking)
 set(JPEG_FIND_QUIETLY ON)
@@ -7,6 +8,7 @@ set(JPEG_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindJPEG)
 else (STANDALONE)
+  use_prebuilt_binary(jpeglib)
   if (LINUX)
     set(JPEG_LIBRARIES jpeg)
   elseif (DARWIN)
diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake
index 6ec14d258807c37b69e4b14bb27acc66e1fe1ea5..a02b5d958e3b8d31645ee443a9a5793ae49e4d2d 100644
--- a/indra/cmake/LLKDU.cmake
+++ b/indra/cmake/LLKDU.cmake
@@ -1,6 +1,8 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 if (NOT STANDALONE AND EXISTS ${LIBS_CLOSED_DIR}/llkdu)
+  use_prebuilt_binary(kdu)
   if (WINDOWS)
     set(KDU_LIBRARY debug kdu_cored optimized kdu_core)
   elseif (LINUX)
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index 7a1ecaf0b1220df1533203cb8393e6c7244b74dc..c0efa27f6e0e993389308235535b23b0a219a341 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -1,6 +1,7 @@
 # -*- cmake -*-
 
 include(OpenGL)
+include(Prebuilt)
 
 if (STANDALONE)
   include(FindSDL)
@@ -12,6 +13,8 @@ if (STANDALONE)
       SDL_LIBRARY
       )
 else (STANDALONE)
+  use_prebuilt_binary(SDL)
+  use_prebuilt_binary(mesa)
   if (LINUX AND VIEWER)
     set (SDL_FOUND TRUE)
     set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux)
diff --git a/indra/cmake/MySQL.cmake b/indra/cmake/MySQL.cmake
index 7dc638ec571f626d8ee3d48d9ae62822f9a78828..e7400a3de409a0987908338d8aea5c401cd6930e 100644
--- a/indra/cmake/MySQL.cmake
+++ b/indra/cmake/MySQL.cmake
@@ -1,7 +1,10 @@
 # -*- cmake -*-
 include(Linking)
+include(Prebuilt)
 # We don't prebuild our own MySQL client library.
 
+use_prebuilt_binary(mysql)
+
 set(MYSQL_FIND_QUIETLY ON)
 set(MYSQL_FIND_REQUIRED ON)
 
diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake
index 22e9787653e3b15cbbdd13ab0abf45aa3bd3f1a7..3f715a2312f84442ba49aeeaeb17ac835337c083 100644
--- a/indra/cmake/NDOF.cmake
+++ b/indra/cmake/NDOF.cmake
@@ -1,4 +1,7 @@
 # -*- cmake -*-
+include(Prebuilt)
+
+use_prebuilt_binary(ndofdev)
 
 if (WINDOWS OR DARWIN)
   add_definitions(-DLIB_NDOF=1)
diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake
index 7395d478fe57663867301c4406141cb05630a8cd..6a2b6811af6f9799c61625e0d3590cca2d64cc28 100644
--- a/indra/cmake/OpenGL.cmake
+++ b/indra/cmake/OpenGL.cmake
@@ -1,5 +1,9 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 if (NOT STANDALONE)
+  use_prebuilt_binary(GL)
+  # possible glh_linear should have its own .cmake file instead
+  use_prebuilt_binary(glh_linear)
   set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
-endif (NOT STANDALONE)
\ No newline at end of file
+endif (NOT STANDALONE)
diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake
index 32dcb505aae2444ab9d2ecd6a93b4710b2d3619a..fcc82c2f497b41d5f28e97293e7ff1881a61acab 100644
--- a/indra/cmake/OpenJPEG.cmake
+++ b/indra/cmake/OpenJPEG.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(OPENJPEG_FIND_QUIETLY ON)
 set(OPENJPEG_FIND_REQUIRED ON)
@@ -6,6 +7,7 @@ set(OPENJPEG_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindOpenJPEG)
 else (STANDALONE)
+  use_prebuilt_binary(openjpeg)
   
   if(WINDOWS)
     # Windows has differently named release and debug openjpeg(d) libs.
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index 715af3ba54d8fbafa2ea39c762e07f1a0a5f0185..81584c09ea6d3499dfee6ff2e1a5943ec93f82d1 100644
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(OpenSSL_FIND_QUIETLY ON)
 set(OpenSSL_FIND_REQUIRED ON)
@@ -6,6 +7,7 @@ set(OpenSSL_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindOpenSSL)
 else (STANDALONE)
+  use_prebuilt_binary(openSSL)
   if (WINDOWS)
     set(OPENSSL_LIBRARIES ssleay32 libeay32)
   else (WINDOWS)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index b4f7e5e66b08487e5efbecccf6e1f854db7b0ea8..4d0b7b2d8d3742e2422291719b7090267857e5df 100644
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(PNG_FIND_QUIETLY ON)
 set(PNG_FIND_REQUIRED ON)
@@ -6,6 +7,7 @@ set(PNG_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindPNG)
 else (STANDALONE)
+  use_prebuilt_binary(libpng)
   set(PNG_LIBRARIES png12)
   set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
 endif (STANDALONE)
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
index 2f4fbd05c76dbcad3cb2412bdf5b5ccb8b83ef3f..33cdeeeed5217c9f68cb84e88cf7ed969599b84b 100644
--- a/indra/cmake/Prebuilt.cmake
+++ b/indra/cmake/Prebuilt.cmake
@@ -2,16 +2,19 @@
 
 include(Python)
 
-macro (use_prebuilt_library _lib)
+macro (use_prebuilt_binary _binary)
   if (NOT STANDALONE)
-    exec_program(${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}
-                 ARGS
-                 --install-dir=${LIBS_PREBUILT_DIR} ${_lib}/${ARCH}
-                 RETURN_VALUE _installed
-                 )
-    if (NOT _installed)
+    execute_process(COMMAND ${PYTHON_EXECUTABLE}
+                    install.py 
+                    --install-dir=${CMAKE_SOURCE_DIR}/..
+                    ${_binary}
+                    WORKING_DIRECTORY ${SCRIPTS_DIR}
+                    RESULT_VARIABLE _installed
+                    )
+    if (NOT _installed EQUAL 0)
       message(FATAL_ERROR
-              "Failed to download or unpack prebuilt ${_lib} for ${ARCH}")
-    endif (NOT _installed)
+              "Failed to download or unpack prebuilt '${_binary}'."
+              " Process returned ${_installed}.")
+    endif (NOT _installed EQUAL 0)
   endif (NOT STANDALONE)
-endmacro (use_prebuilt_library _lib)
+endmacro (use_prebuilt_binary _binary)
diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake
index 7d2955ce360fbe7b1a3a6f7181009b2564c764c6..f529f5b6440a3834953b756289cc7fd6888cdb5d 100644
--- a/indra/cmake/UI.cmake
+++ b/indra/cmake/UI.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 if (STANDALONE)
   include(FindPkgConfig)
@@ -30,6 +31,7 @@ if (STANDALONE)
     add_definitions(${${pkg}_CFLAGS_OTHERS})
   endforeach(pkg)
 else (STANDALONE)
+  use_prebuilt_binary(gtk-atk-pango-glib)
   if (LINUX)
     set(UI_LIBRARIES
         atk-1.0
diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..7329972596b31e0399f96a93358e86272283e5a8
--- /dev/null
+++ b/indra/cmake/ViewerMiscLibs.cmake
@@ -0,0 +1,9 @@
+# -*- cmake -*-
+include(Prebuilt)
+
+if (NOT STANDALONE)
+  use_prebuilt_binary(libstdc++)
+  use_prebuilt_binary(libuuid)
+  use_prebuilt_binary(vivox)
+endif(NOT STANDALONE)
+
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
index 3fd6f80eb91e5f2d3b3cdfeb9d648ec052df3851..107d1926bae597cbbc702923a53b3efa5320c107 100644
--- a/indra/cmake/XmlRpcEpi.cmake
+++ b/indra/cmake/XmlRpcEpi.cmake
@@ -1,4 +1,5 @@
 # -*- cmake -*-
+include(Prebuilt)
 
 set(XMLRPCEPI_FIND_QUIETLY ON)
 set(XMLRPCEPI_FIND_REQUIRED ON)
@@ -6,6 +7,7 @@ set(XMLRPCEPI_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindXmlRpcEpi)
 else (STANDALONE)
+    use_prebuilt_binary(xmlrpc-epi)
     if (WINDOWS)
         set(XMLRPCEPI_LIBRARIES xmlrpcepi)
     else (WINDOWS)
diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake
index 3740103a72551070feb47f25508a8f6c87cf17f5..80d41919718493fed8e7dab3173c73bd6e11bb8c 100644
--- a/indra/cmake/ZLIB.cmake
+++ b/indra/cmake/ZLIB.cmake
@@ -3,13 +3,18 @@
 set(ZLIB_FIND_QUIETLY ON)
 set(ZLIB_FIND_REQUIRED ON)
 
+include(Prebuilt)
+
 if (STANDALONE)
   include(FindZLIB)
 else (STANDALONE)
+  use_prebuilt_binary(zlib)
   if (WINDOWS)
     set(ZLIB_LIBRARIES zlib)
   else (WINDOWS)
     set(ZLIB_LIBRARIES z)
   endif (WINDOWS)
-  set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+  if (WINDOWS OR LINUX)
+    set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/zlib)
+  endif (WINDOWS OR LINUX)
 endif (STANDALONE)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 6d1e58d40c99d64772dbd152bc30d6401846c105..20876d630fb77d1bd9905fe19b5b0b68cd9543bc 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -33,6 +33,7 @@ include(TemplateCheck)
 include(UI)
 include(UnixInstall)
 include(LLKDU)
+include(ViewerMiscLibs)
 
 include_directories(
     ${ELFIO_INCLUDE_DIR}
diff --git a/indra/newview/res-sdl/arrow.BMP b/indra/newview/res-sdl/arrow.BMP
deleted file mode 100644
index a8f6da64b573f4136d742e98fbce372b389fa966..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/arrow.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/arrowcop.BMP b/indra/newview/res-sdl/arrowcop.BMP
deleted file mode 100644
index 1a26a0df34166f5bb159625bd2b424c7e5296a7a..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/arrowcop.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/arrowcopmulti.BMP b/indra/newview/res-sdl/arrowcopmulti.BMP
deleted file mode 100644
index 48f153cef662b9cfab38df3ab11264837c3fdbc7..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/arrowcopmulti.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/arrowdrag.BMP b/indra/newview/res-sdl/arrowdrag.BMP
deleted file mode 100644
index cd868eec2008229506cca29e6a706325996b5916..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/arrowdrag.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/circleandline.BMP b/indra/newview/res-sdl/circleandline.BMP
deleted file mode 100644
index 284ae8b7d51ab1321fbdeea11d93c43321c5728a..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/circleandline.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/cross.BMP b/indra/newview/res-sdl/cross.BMP
deleted file mode 100644
index 0b4672d4d61f54cbc0a4cb603e9081525bd3e0d5..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/cross.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/hand.BMP b/indra/newview/res-sdl/hand.BMP
deleted file mode 100644
index 2a092fbb7feb8f112168a0b95d50401a4db897b1..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/hand.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/ibeam.BMP b/indra/newview/res-sdl/ibeam.BMP
deleted file mode 100644
index 820904a228d2d162e914b8dd99c8c2ed32b663d8..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/ibeam.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP
deleted file mode 100644
index 4a44aafbfaeefcc50b9a461693f9de9bc29b8930..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/ll_icon.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llarrow.BMP b/indra/newview/res-sdl/llarrow.BMP
deleted file mode 100644
index a8f6da64b573f4136d742e98fbce372b389fa966..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llarrow.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llarrowdrag.BMP b/indra/newview/res-sdl/llarrowdrag.BMP
deleted file mode 100644
index cd868eec2008229506cca29e6a706325996b5916..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llarrowdrag.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llarrowdragmulti.BMP b/indra/newview/res-sdl/llarrowdragmulti.BMP
deleted file mode 100644
index fb528bc92d20e8ad39c1f6a74709d4986c4ba6cb..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llarrowdragmulti.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llarrowlocked.BMP b/indra/newview/res-sdl/llarrowlocked.BMP
deleted file mode 100644
index 0aaa441ab1f77ecaba93139c4434a97561777806..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llarrowlocked.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llgrablocked.BMP b/indra/newview/res-sdl/llgrablocked.BMP
deleted file mode 100644
index 847439670f94de1aedda70d2cbcd3ad27d31c8dc..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llgrablocked.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llno.BMP b/indra/newview/res-sdl/llno.BMP
deleted file mode 100644
index 284ae8b7d51ab1321fbdeea11d93c43321c5728a..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llno.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/llnolocked.BMP b/indra/newview/res-sdl/llnolocked.BMP
deleted file mode 100644
index 61f0170cb34615a7b0c46c41a1bee31f8e6be555..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/llnolocked.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolcamera.BMP b/indra/newview/res-sdl/lltoolcamera.BMP
deleted file mode 100644
index c961d7a49c749cf414b3399d1a07824ff9ae369b..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolcamera.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolcreate.BMP b/indra/newview/res-sdl/lltoolcreate.BMP
deleted file mode 100644
index 08a4a9322d9873617fe4a73e60174df884b042cd..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolcreate.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolfocus.BMP b/indra/newview/res-sdl/lltoolfocus.BMP
deleted file mode 100644
index afb90a95e31fdda2bce51e3acabcbb8b85343c6e..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolfocus.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolgrab.BMP b/indra/newview/res-sdl/lltoolgrab.BMP
deleted file mode 100644
index f2ac68bf3cce2c148bbb6de92e75657a5ca513a1..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolgrab.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolland.BMP b/indra/newview/res-sdl/lltoolland.BMP
deleted file mode 100644
index 64e63656250c5a7056f20f0725971206fd8d077f..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolland.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolpan.BMP b/indra/newview/res-sdl/lltoolpan.BMP
deleted file mode 100644
index ffbef21ec74db5e9ea6e262640df17f9594a8435..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolpan.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolpipette.BMP b/indra/newview/res-sdl/lltoolpipette.BMP
deleted file mode 100644
index 2d27118289e22acaf863e508f18aa66d40f210c6..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolpipette.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolrotate.BMP b/indra/newview/res-sdl/lltoolrotate.BMP
deleted file mode 100644
index dd84673018ed70c3013e6fb47fd858f16705e971..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolrotate.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolscale.BMP b/indra/newview/res-sdl/lltoolscale.BMP
deleted file mode 100644
index 882515e5e3c1a7450f967775f0080c7b64e7a0b2..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolscale.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltooltranslate.BMP b/indra/newview/res-sdl/lltooltranslate.BMP
deleted file mode 100644
index d084f6a0269e9b88c548a8f44e92f8a772311141..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltooltranslate.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolzoomin.BMP b/indra/newview/res-sdl/lltoolzoomin.BMP
deleted file mode 100644
index e4e46cc70281c40f2b09e0536e80ee282712c4de..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolzoomin.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/lltoolzoomout.BMP b/indra/newview/res-sdl/lltoolzoomout.BMP
deleted file mode 100644
index 7f958383ab820ad0860cbf3482cba82216492bba..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/lltoolzoomout.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/sizenesw.BMP b/indra/newview/res-sdl/sizenesw.BMP
deleted file mode 100644
index 559579f40e4b563d75af4507d21f53967706a048..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/sizenesw.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/sizens.BMP b/indra/newview/res-sdl/sizens.BMP
deleted file mode 100644
index 8373077dffc48ab321f24b72b79b23e54f1f870d..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/sizens.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/sizenwse.BMP b/indra/newview/res-sdl/sizenwse.BMP
deleted file mode 100644
index 6d069fa7658e571f4bd1f7cd71e0fa3b6708f8d4..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/sizenwse.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/sizewe.BMP b/indra/newview/res-sdl/sizewe.BMP
deleted file mode 100644
index 878df453a4a9ed6ff177d690f1aab46e51c71dfc..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/sizewe.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolbuy.BMP b/indra/newview/res-sdl/toolbuy.BMP
deleted file mode 100644
index a00bdb2c58d3a4650eb93999d6252cede3028185..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolbuy.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolmediaopen.BMP b/indra/newview/res-sdl/toolmediaopen.BMP
deleted file mode 100644
index ac4b231994c1f3ccd69b04c35759fac271b1dbc4..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolmediaopen.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolopen.BMP b/indra/newview/res-sdl/toolopen.BMP
deleted file mode 100644
index 93c7e44b28d960eb0c67de79a5c6e3846dbdf0b2..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolopen.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolpause.BMP b/indra/newview/res-sdl/toolpause.BMP
deleted file mode 100644
index dd2c6857d28b9eb531819e1774e609e994e4bb37..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolpause.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolpickobject.BMP b/indra/newview/res-sdl/toolpickobject.BMP
deleted file mode 100644
index 25469fc3a86c94b64c87866a6c1fdc227d41e7d8..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolpickobject.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolpickobject2.BMP b/indra/newview/res-sdl/toolpickobject2.BMP
deleted file mode 100644
index 09df69e675e89c8797bf03c3a96095248e45fd3f..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolpickobject2.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolpickobject3.BMP b/indra/newview/res-sdl/toolpickobject3.BMP
deleted file mode 100644
index fc286980501efa6815696413f6c8e268b37ae1d5..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolpickobject3.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolplay.BMP b/indra/newview/res-sdl/toolplay.BMP
deleted file mode 100644
index 9c40d7dbecab270979b9a06fe4a7a0fe5ac1a56c..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolplay.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/toolsit.BMP b/indra/newview/res-sdl/toolsit.BMP
deleted file mode 100644
index ca911ece719e9101d9615e23a32b8a4d84611e2b..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/toolsit.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/wait.BMP b/indra/newview/res-sdl/wait.BMP
deleted file mode 100644
index 26dec59afe10818db0cff219f91d41dc647dd754..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/wait.BMP and /dev/null differ
diff --git a/indra/newview/res-sdl/working.BMP b/indra/newview/res-sdl/working.BMP
deleted file mode 100644
index 26dec59afe10818db0cff219f91d41dc647dd754..0000000000000000000000000000000000000000
Binary files a/indra/newview/res-sdl/working.BMP and /dev/null differ
diff --git a/install.xml b/install.xml
new file mode 100644
index 0000000000000000000000000000000000000000..497ed9cc026f23d1e80a4316cfdc6ffc269adc6d
--- /dev/null
+++ b/install.xml
@@ -0,0 +1,1242 @@
+<?xml version="1.0" ?>
+<llsd>
+<map>
+    <key>binaries</key>
+    <map>
+      <key>GL</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 1991-2000 Silicon Graphics, Inc.</string>
+        <key>description</key>
+        <string>A standard for 3D Graphics rendering engine.</string>
+        <key>license</key>
+        <string>GL</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>7b147162449c216a016dc2bfe2a4380c</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/GL-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>d78e3e4d8c33e5233d88ec8096307ee8</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/GL-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>e0736f3f17fe980ef68b8a65ef90011d</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/GL-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>SDL</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga</string>
+        <key>description</key>
+        <string>The Simple DirectMedia Layer libraries are used for handling input and basic window/GL setup on the Linux client.</string>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>d7500212b654e9380c4dc24166285407</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/SDL-1.2.5-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>c7f3da1da96ccc1f26ec92634e7771b8</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/SDL-1.2.5-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>1c081cc35730919781e23b916a56722e</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/SDL-1.2.5-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>apr_suite</key>
+      <map>
+        <key>license</key>
+        <string>apache 2.0</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>ee3014eda3d5f912c1e3ec21bbdddcaf</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/apr_suite-1.2.8-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>4b0f2cc3ec66162be6cf0b13186bc838</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/apr_suite-1.2.8-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>979257a1b24d9200be58872d9c658114</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/apr_suite-1.2.8-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>ares</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright 1998 by the Massachusetts Institute of Technology.</string>
+        <key>description</key>
+        <string>Performs DNS requests and name resolves asynchronously. Used with libcurl to keep all HTTP operations async.</string>
+        <key>license</key>
+        <string>c-ares</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>19aae45edfd29a269cd10af7729489e7</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ares-1.3.0-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>8b163aa08cf4a5b70f93519137fa6cf0</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ares-1.3.0-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>bbbe5e5f8504125e2ab813f666fd61ba</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ares-1.3.0-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>berkeley</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 1990-1999 Sleepycat Software. All rights reserved.</string>
+        <key>description</key>
+        <string>a high-performance, embedded database library</string>
+        <key>license</key>
+        <string>sleepycat</string>
+      </map>
+      <key>boost</key>
+      <map>
+        <key>copyright</key>
+        <string>various</string>
+        <key>description</key>
+        <string>A set of portable C++ libraries which provide a wide set of functionality. Used primarily for tokenization. </string>
+        <key>license</key>
+        <string>boost</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>4afb62f563bb2fd9d43fc071e2eeb167</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/boost-1.32.0-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>14aba81fa0993e420882314a3fea5127</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/boost-1.32.0-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>2b627d2a598f883950c21bae52738176</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/boost-1.32.0-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>curl</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 1996 - 2008, Daniel Stenberg, &lt;daniel@haxx.se&gt;.</string>
+        <key>description</key>
+        <string>Client-side URL transfer library. Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources. </string>
+        <key>license</key>
+        <string>curl</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>722c0e0eccf28b00e0f759362ef81ddf</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/curl-7.16.0-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>cd89f34324acf1222078298974c1dfb3</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/curl-7.16.0-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>08d17bc997494a852537b0c7b4425d47</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/curl-7.16.0-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>elfio</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>e4f5109f8c119613d7b2c3706d786e43</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/elfio-1.0.3-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>expat</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd</string>
+        <key>description</key>
+        <string>An XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags).</string>
+        <key>license</key>
+        <string>mit</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>93760196ea3e851b1a334743816e189d</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/expat-1.95.8-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>8e990a9e3c30c7c37c147ac0df70a323</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/expat-1.95.8-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>e58538aae9982209e095bbf6660c8d6b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/expat-1.95.8-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>fmod</key>
+      <map>
+        <key>copyright</key>
+        <string>FMOD Sound System, copyright (C) Firelight Technologies Pty, Ltd., 1994-2006.</string>
+        <key>description</key>
+        <string>Audio engine and mp3 stream decoder .</string>
+        <key>license</key>
+        <string>fmod</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>d13cc275db503492fc87c7b36c1c49d3</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/fmod-3.75-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>85caf188852f2cfede49ff12a3d928d5</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/fmod-3.75-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>1a55dec2907821f5f785648a660126c3</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/fmod-3.75-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>fontconfig</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>6630fea6b036f3e937608b3d4186adfa</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/fontconfig-2.2.3-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>freetype</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright</string>
+        <key>description</key>
+        <string>Font</string>
+        <key>license</key>
+        <string>freetype</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>b34eb8af0a2b736a1d70d8b32b3e009d</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/freetype-2.1.5-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>a52b44f89b7422c565da5f4a5c7f582c</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/freetype-2.1.5-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>5b1aae54ea3313a9f424719323eb5ad3</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/freetype-2.1.5-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>glh_linear</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 2000 Cass Everitt; Copyright (c) 2000 NVIDIA Corporation; All rights reserved.</string>
+        <key>description</key>
+        <string>nVidia NVParse SDK: platform-indepenedent C++ Apple OpenGL helper library</string>
+        <key>license</key>
+        <string>glh_linear</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>64ea2fca2ca9457b9305ec416c574a61</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/glh_linear-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>6fd9c490b7460e2b433381050495e48e</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/glh_linear-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>e286dc9f7ce90856a7ac291874b6fc34</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/glh_linear-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>google</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>6df3889822deb8b80ac6f6d421a35137</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/google-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>gstreamer</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>5e0e4ee938b56a118c90d51447009ba9</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/gstreamer-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>gtk-atk-pango-glib</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald</string>
+        <key>description</key>
+        <string>Libraries associated with GTK for gui features. atk: interfaces for accessibility; glib: low-level core functionality for using GTK+ and GNOME; pango: layout/rendering of text w/ emphasis on internationalization.</string>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>72801a23b43586b822c8a1dfc1a6e313</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/gtk-atk-pango-glib-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>492b04de6ba02167cef7a04e8dc5e748</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/gtk-atk-pango-glib-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>havok</key>
+      <map>
+        <key>copyright</key>
+        <string>on file</string>
+        <key>description</key>
+        <string>Physics engine for the simulator</string>
+        <key>license</key>
+        <string>havok</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>7d3d2d71c08729fe881a059af1d9b938</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/havok-4.6-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>36a892b451b5cbc8f72d6f1153f55cf8</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/havok-4.6-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>b63a2f20df43c68062c6b8e77a2da455</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/havok-4.6-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>jpeglib</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 2003, Yves Piguet.</string>
+        <key>description</key>
+        <string>An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release </string>
+        <key>license</key>
+        <string>jpeglib</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>62cc07ef64f31f493f55e618c915125b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/jpeglib-6b-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>6bb623a88116002124686248ebd35fd9</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/jpeglib-6b-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>b28852df715401eae575ccd9d5c84cf1</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/jpeglib-6b-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>kdu</key>
+      <map>
+        <key>copyright</key>
+        <string>on file</string>
+        <key>description</key>
+        <string>Kakadu (KDU) JPEG-2000 decoder library. </string>
+        <key>license</key>
+        <string>kdu</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>a351af91b5a102d1b6fe95b5d1ab4347</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>155ecb6f704c1082aa6565537ada024b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>5cd4c0db91e3687290de685203634ab8</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>libpng</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson</string>
+        <key>description</key>
+        <string>An open, extensible image format with lossless compression. PNG Reference Library </string>
+        <key>license</key>
+        <string>libpng</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>2e41f3710b5769e58d2e00944feb7bee</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/libpng-1.2.18-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>642dd0ba1fa7ac55fae555cd622b36f6</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/libpng-1.2.18-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>0274c3d4a3b7cce8eede207348438f3b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/libpng-1.2.18-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>libstdc++</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</string>
+        <key>description</key>
+        <string>Bundled library.</string>
+        <key>license</key>
+        <string>gpl</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>8c39ea5d1feebbe9b8ee5d5933eeabe5</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/libstdc++-6.0-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>libuuid</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</string>
+        <key>description</key>
+        <string>Generates UUIDs under Linux. Originally a part of the ext2fs filesystem. Also see lluuid.cpp for all platforms. Part of the e2fsprogs package.</string>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>cf68933edc8d556d6901179a7993bbc0</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/libuuid-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>libxml</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>3a71ea5ff924e70c6786ef2c202f553b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/libxml-2.6.24-linux-20080610.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>llmozlib</key>
+      <map>
+        <key>license</key>
+        <string>mozillaPL</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>e2969baf0e39f6a586141a75c3360330</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/llmozlib-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>55ab8be3f18e27095f7ecae7d90804d5</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/llmozlib-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>73a0bc8ea770a4035175161d2b1e903f</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/llmozlib-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>mesa</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1999-2007  Brian Paul All Rights Reserved.</string>
+        <key>description</key>
+        <string>Mesa 3-D graphics library. Provides the required Apple OpenGL headers under Linux.</string>
+        <key>license</key>
+        <string>mesa</string>
+        <key>packages</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>461891f44070780d9ca0b26988b6f44e</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/mesa-7.0-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>e0a27aef7b2de0d5c78c753f72214e8d</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/mesa-7.0-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>mysql</key>
+      <map>
+        <key>license</key>
+        <string>gpl</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>a60de9d31aa3dfab8851f8c2dfa3f8dc</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/mysql-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>813e8621ca3cd5a720f709620927070f</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/mysql-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>ndofdev</key>
+      <map>
+        <key>copyright</key>
+        <string>(c) 2008 Linden Lab.</string>
+        <key>description</key>
+        <string>in use on windows and darwin for joystick support.</string>
+        <key>license</key>
+        <string>linden</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>dae6e00c7eed6bacdecd639c4f5cef1d</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ndofdev-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>ccaf379968c886258d5390d06ff1a2c0</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ndofdev-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>af8249252bcd3782606bf17cdc145ea4</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ndofdev-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>ogg-vorbis</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 2008 Xiph.org Foundation</string>
+        <key>description</key>
+        <string>Ogg: container format Vorbis: audio compression scheme</string>
+        <key>license</key>
+        <string>ogg-vorbis</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>59d3f15d89d9433f931f480878f46d4c</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ogg-vorbis-1.03-1.1.2-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>54a29d28fbce6dd6abb875975a42acf1</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ogg-vorbis-1.03-1.1.2-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>2800543038e88c233976a2301e67325f</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/ogg-vorbis-1.03-1.1.2-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>openSSL</key>
+      <map>
+        <key>license</key>
+        <string>openSSL</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>5da0ef41618a024795508f5c93d61754</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/openSSL-0.9.7c-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>fb54b93f881e587363b134f42e2f1c0b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/openSSL-0.9.7c-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>0f0e8ea5014f2112f2d04a85a0b8720e</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/openSSL-0.9.7c-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>openjpeg</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium</string>
+        <key>description</key>
+        <string>An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release </string>
+        <key>license</key>
+        <string>openjpeg</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>e169d2372539fc96b72dc59aa7a656e6</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/openjpeg-1.2-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>8b2733f8e4b7d58db7392d7a6837675f</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/openjpeg-1.2-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>9f7ae7023fad3c823a303c57610973c5</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/openjpeg-1.2-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>quicktime</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1990-2006 by Apple Computer, Inc., all rights reserved.</string>
+        <key>description</key>
+        <string>Separate download. Used to play in-world video clips on a prim. </string>
+        <key>license</key>
+        <string>quicktime</string>
+        <key>packages</key>
+        <map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>7a2e6fc89b1ef027f3a36ebb46fb0c8a</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/quicktime-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>smartheap</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1991-2000 Compuware Corporation. All Rights Reserved.</string>
+        <key>description</key>
+        <string>Memory Management Library</string>
+        <key>license</key>
+        <string>smartheap</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>f54131b5f228e805c64c2e4e6c96579a</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/smartheap-6.0.2-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>499208522bf7d7843e1d014d64214e06</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/smartheap-6.0.2-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>78fd47017f21d11eae43bca3e38a3e1e</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/smartheap-6.0.2-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>tut</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright 2002-2006 Vladimir Dyuzhev</string>
+        <key>description</key>
+        <string>C++ Template Unit Test</string>
+        <key>license</key>
+        <string>bsd</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>fe8045e47dc505786e1d45d480190f96</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/tut-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>2e28af0b6124a472b9aac6f2225dca8d</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/tut-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>953cc124943a05e474687a127d2e88d9</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/tut-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>unistd</key>
+      <map>
+        <key>copyright</key>
+        <string>(c) 2008 Linden Lab.</string>
+        <key>description</key>
+        <string>Placeholder file to make flex happy on windows.</string>
+        <key>license</key>
+        <string>linden</string>
+        <key>packages</key>
+        <map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>6353aff33d7d03b22055aec76f53a866</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/unistd-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>vivox</key>
+      <map>
+        <key>copyright</key>
+        <string> </string>
+        <key>license</key>
+        <string>vivox</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>121199818b827e147179c3d3494815e1</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/vivox-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>c58f03002a9c452d4c8cb1874d3ac44b</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/vivox-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>fce352d6d99233b2dac1cd51add0f0d1</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/vivox-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>xmlrpc-epi</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright 2000 Epinions, Inc.</string>
+        <key>description</key>
+        <string>Implementation of the xmlrpc protocol in C that provides an API for developers to serialize RPC requests to and from XML. </string>
+        <key>license</key>
+        <string>xmlrpc-epi</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>d116c41b95ec41adee7bbfdbf2c74ffb</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/xmlrpc-epi-0.51-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>md5sum</key>
+            <string>dd08d9f03c9fb84406aa31494e4e5663</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/xmlrpc-epi-0.51-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>e904dd2653fdb9dac15cc452a74f4bcb</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/xmlrpc-epi-0.51-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+      <key>zlib</key>
+      <map>
+        <key>copyright</key>
+        <string>Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler</string>
+        <key>description</key>
+        <string>A Massively Spiffy Yet Delicately Unobtrusive Compression Library (Also Free, Not to Mention Unencumbered by Patents)</string>
+        <key>license</key>
+        <string>zlib</string>
+        <key>packages</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>md5sum</key>
+            <string>99be09df2ec92282293761cd9ae242ac</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/zlib-1.1.4-darwin-20080610.tar.bz2</uri>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>i686</key>
+            <map>
+              <key>md5sum</key>
+              <string>7efbde55728369e76ab9d46bff60c87f</string>
+              <key>url</key>
+              <uri>http://codex.lindenlab.com/~aaronb/install_pkgs/zlib-1.2.1-linux-i686.tar.gz</uri>
+            </map>
+            <key>md5sum</key>
+            <string>a93da3d0a1fcf05c70d545991e0be227</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/zlib-1.1.4-linux-20080610.tar.bz2</uri>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>md5sum</key>
+            <string>7058b7aeded6d8bb10bd0de8539f8392</string>
+            <key>url</key>
+            <uri>http://user.lindenlab.com/~jenn/install_pkgs/zlib-1.1.4-windows-20080611.tar.bz2</uri>
+          </map>
+        </map>
+      </map>
+    </map>
+    <key>licenses</key>
+    <map>
+      <key>GL</key>
+      <map>
+        <key>url</key>
+        <string>http://www.xfree86.org/4.4.0/LICENSE9.html#sgi</string>
+      </map>
+      <key>apache 2.0</key>
+      <map>
+        <key>url</key>
+        <string>http://www.apache.org/licenses/LICENSE-2.0</string>
+      </map>
+      <key>boost</key>
+      <map>
+        <key>url</key>
+        <string>http://www.boost.org/LICENSE_1_0.txt</string>
+      </map>
+      <key>bsd</key>
+      <map>
+        <key>url</key>
+        <string>http://www.opensource.org/licenses/bsd-license.php</string>
+      </map>
+      <key>c-ares</key>
+      <map>
+        <key>text</key>
+        <string>http://daniel.haxx.se/projects/c-ares/license.html</string>
+      </map>
+      <key>curl</key>
+      <map>
+        <key>url</key>
+        <string>http://curl.haxx.se/docs/copyright.html</string>
+      </map>
+      <key>fmod</key>
+      <map>
+        <key>url</key>
+        <string>http://www.fmod.org/ifmodlicense.html</string>
+      </map>
+      <key>freetype</key>
+      <map>
+        <key>url</key>
+        <string>http://freetype.sourceforge.net/FTL.TXT</string>
+      </map>
+      <key>glh_linear</key>
+      <map>
+        <key>text</key>
+        <string>glh - is a platform-indepenedent C++ OpenGL helper library 
+
+Copyright (c) 2000 Cass Everitt
+Copyright (c) 2000 NVIDIA Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+Redistributions of source code must retain the above
+copyright notice, this list of conditions and the following
+disclaimer. 
+Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials
+provided with the distribution. 
+The names of contributors to this software may not be used
+to endorse or promote products derived from this software
+without specific prior written permission. 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE. 
+
+Cass Everitt - cass@r3.nu
+
+</string>
+      </map>
+      <key>gpl</key>
+      <map>
+        <key>url</key>
+        <string>http://www.gnu.org/licenses/gpl.html</string>
+      </map>
+      <key>havok</key>
+      <map>
+        <key>text</key>
+        <string>on file</string>
+      </map>
+      <key>intel</key>
+      <map>
+        <key>text</key>
+        <string>Haven't yet found.
+</string>
+      </map>
+      <key>jpeglib</key>
+      <map>
+        <key>text</key>
+        <string>http://nyctergatis.com/jpeglib/</string>
+      </map>
+      <key>kdu</key>
+      <map>
+        <key>text</key>
+        <string>jpeg2000 license #00024 (on file)</string>
+      </map>
+      <key>lgpl</key>
+      <map>
+        <key>url</key>
+        <string>http://www.gnu.org/copyleft/lgpl.html</string>
+      </map>
+      <key>libpng</key>
+      <map>
+        <key>text</key>
+        <string>http://www.libpng.org/pub/png/src/libpng-LICENSE.txt</string>
+      </map>
+      <key>linden</key>
+      <map>
+        <key>text</key>
+        <string>Using this license for Linden Lab owned library files</string>
+      </map>
+      <key>mesa</key>
+      <map>
+        <key>url</key>
+        <string>http://www.mesa3d.org/license.html</string>
+      </map>
+      <key>mit</key>
+      <map>
+        <key>text</key>
+        <string>http://www.jclark.com/xml/copying.txt</string>
+      </map>
+      <key>mozillaPL</key>
+      <map>
+        <key>url</key>
+        <string>http://www.mozilla.org/MPL/MPL-1.1.html</string>
+      </map>
+      <key>ogg-vorbis</key>
+      <map>
+        <key>url</key>
+        <string>http://www.xiph.org/licenses/bsd/</string>
+      </map>
+      <key>openSSL</key>
+      <map>
+        <key>url</key>
+        <string>http://www.openssl.org/source/license.html</string>
+      </map>
+      <key>openjpeg</key>
+      <map>
+        <key>url</key>
+        <string>http://www.openjpeg.org/BSDlicense.txt</string>
+      </map>
+      <key>quicktime</key>
+      <map>
+        <key>text</key>
+        <string>ENGLISH
+
+Apple Computer, Inc.
+QuickTime 7 Software Developer Kit (SDK) 
+Software License Agreement
+
+PLEASE READ THIS SOFTWARE LICENSE AGREEMENT ("LICENSE") BEFORE USING THE SOFTWARE.  BY USING THE SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE.  IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, SIGNIFY YOUR AGREEMENT TO BE BOUND BY THE TERMS OF THIS LICENSE BY CLICKING THE "AGREE/ACCEPT" BUTTON. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, RETURN THE APPLE SOFTWARE TO THE PLACE WHERE YOU OBTAINED IT FOR A REFUND OR, IF THE SOFTWARE WAS ACCESSED ELECTRONICALLY, CLICK "DISAGREE/DECLINE".
+
+IMPORTANT NOTE: To the extent this software may be used to reproduce materials, it is licensed to you only for reproduction of materials you are authorized or legally permitted to reproduce.  
+
+1. License.  Any software, tools, utilities, sample code, documentation, fonts, API?s, header files and other materials accompanying this License, whether on disk, print or electronic documentation, in read only memory, or any other media, (collectively, the "Apple Software") are licensed, not sold, to you by Apple Computer, Inc. ("Apple") for use only under the terms of this License, and Apple reserves all rights not expressly granted to you.  The rights granted herein are limited to Apple's and its licensors' intellectual property rights in the Apple Software and do not include any other patents or intellectual property rights.   You own the media on which the Apple Software is recorded but Apple and/or Apple's licensor(s) retain ownership of the Apple Software itself.  The Apple Software in this package and any copies, modifications and derivative works that this License authorizes you to make are subject to this License.  
+
+2. Permitted Uses and Restrictions.  You may use the Apple Software to develop application software that is compatible with, and runs only on Mac OS X and/or Windows platforms with QuickTime installed.  Except for compiling header files and linking libraries as necessary to build your application software, you have no right to modify, incorporate into or include in combination with your own programs, license or otherwise redistribute any portion of the Apple Software. Your software application may not interfere with the functionality of QuickTime Player or the QuickTime Plug-in, including but not limited to file type or MIME type associations that are registered to QuickTime. You may make only as many internal use copies of the Apple Software as reasonably necessary to use the Apple Software as permitted in this paragraph and distribute such copies only to your employees whose job duties require them to so use the Apple Software. You must reproduce on each copy of the Apple Software or portion thereof, the Apple copyright notice and any other proprietary legends that were on the original copy of the Apple Software.  Except as expressly permitted in this License, you may not decompile, reverse engineer, disassemble, modify, rent, lease, loan, sublicense, distribute or create derivative works based upon the Apple Software in whole or part.  Your rights under this License will terminate automatically without notice from Apple if you fail to comply with any term(s) of this License. In addition, Apple reserves the right to terminate this License if a new version of Apple's operating system software or the Apple Software is released which is incompatible with the Apple Software.  
+
+3. Disclaimer Of Warranty.  The Apple Software may be "alpha", "beta", "development", pre-release, untested, and/or not fully tested and may contain errors that could cause failures or loss of data, be incomplete or contain inaccuracies.  YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT USE OF THE APPLE SOFTWARE IS AT YOUR SOLE RISK AND THAT THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY AND EFFORT IS WITH YOU. EXCEPT FOR THE LIMITED WARRANTY ON MEDIA SET FORTH ABOVE AND TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE APPLE SOFTWARE IS PROVIDED "AS IS", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND, AND APPLE AND APPLE'S LICENSORS (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE PURPOSES OF SECTIONS 4 AND 5) HEREBY DISCLAIM ALL WARRANTIES AND CONDITIONS WITH RESPECT TO THE APPLE SOFTWARE, EITHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NON-INFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE APPLE SOFTWARE, THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR REQUIREMENTS, THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY.  SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES OR LIMITATIONS ON APPLICABLE STATUTORY RIGHTS OF A CONSUMER, SO THE ABOVE EXCLUSION AND LIMITATIONS MAY NOT APPLY TO YOU.  
+
+4. Limitation Of Liability. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT SHALL APPLE BE LIABLE FOR PERSONAL INJURY, OR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES WHATSOEVER, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, LOSS OF DATA, BUSINESS INTERRUPTION OR ANY OTHER COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO YOUR USE OR INABILITY TO USE THE APPLE SOFTWARE, HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY (CONTRACT, TORT OR OTHERWISE) AND EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY FOR PERSONAL INJURY, OR OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU.  In no event shall Apple's total liability to you for all damages (other than as may be required by applicable law in cases involving personal injury) exceed the amount of fifty dollars ($50.00).  The foregoing limitations will apply even if the above stated remedy fails of its essential purpose.
+
+5. Export Control. You may not use or otherwise export or reexport the Apple Product except as authorized by United States law and the laws of the jurisdiction in which the Apple Product was obtained. In particular, but without limitation, the Apple Product may not be exported or re-exported (a) into any U.S. embargoed countries or (b) to anyone on the U.S. Treasury Department's list of Specially Designated Nationals or the U.S. Department of Commerce Denied Person?s List or Entity List.  By using the Apple Product, you represent and warrant that you are not located in any such country or on any such list. 
+
+6. Government End Users.  The Apple Software and related documentation are "Commercial Items", as that term is defined at 48 C.F.R. ?2.101, consisting of "Commercial Computer Software" and "Commercial Computer Software Documentation", as such terms are used in 48 C.F.R. ?12.212 or 48 C.F.R. ?227.7202, as applicable.  Consistent with 48 C.F.R. ?12.212 or 48 C.F.R. ?227.7202-1through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein.  Unpublished-rights reserved under the copyright laws of the United States.
+
+7. Controlling Law and Severability.  This License will be governed by and construed in accordance with the laws of the State of California, as applied to agreements entered into and to be performed entirely within California between California residents. This License shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded. If for any reason a court of competent jurisdiction finds any provision, or portion thereof, to be unenforceable, the remainder of this License shall continue in full force and effect.  
+
+8. Complete Agreement.  This License constitutes the entire agreement between the parties with respect to the use of the Apple Software licensed hereunder and supersedes all prior or contemporaneous understandings regarding such subject matter.  No amendment to or modification of this License will be binding unless in writing and signed by Apple. Any translation of this License is done for local requirements and in the event of a dispute between the English and any non-English versions, the English version of this License shall govern.
+
+EA0300
+</string>
+      </map>
+      <key>sleepycat</key>
+      <map>
+        <key>url</key>
+        <string>http://opensource.org/licenses/sleepycat.php</string>
+      </map>
+      <key>smartheap</key>
+      <map>
+        <key>text</key>
+        <string>on file
+</string>
+      </map>
+      <key>things</key>
+      <map>
+      </map>
+      <key>vivox</key>
+      <map>
+        <key>text</key>
+        <string>on file</string>
+      </map>
+      <key>xmlrpc-epi</key>
+      <map>
+        <key>url</key>
+        <string>http://xmlrpc-epi.sourceforge.net/main.php?t=license</string>
+      </map>
+      <key>zlib</key>
+      <map>
+        <key>url</key>
+        <string>http://www.gzip.org/zlib/zlib_license.html</string>
+      </map>
+    </map>
+  </map>
+</llsd>
diff --git a/scripts/install.py b/scripts/install.py
index 7421d697f6738b2004d7d0b44ab6ee7e359f3838..7a1d57aaa70e1d2e823e6dab3c94530c01dc6676 100755
--- a/scripts/install.py
+++ b/scripts/install.py
@@ -34,7 +34,6 @@
 """
 
 import copy
-import errno
 import md5
 import optparse
 import os
@@ -73,18 +72,18 @@ def __init__(self, pkgname, url, md5sum, cache_dir, platform_path):
     def __str__(self):
         return "ifile{%s:%s}" % (self.pkgname, self.url)
 
-    def _is_md5_match(self):
-        hasher = md5.new(file(self.filename).read())
+    def _is_md5sum_match(self):
+        hasher = md5.new(file(self.filename, 'rb').read())
         if hasher.hexdigest() == self.md5sum:
             return  True
         return False
 
     def is_match(self, platform):
         """@brief Test to see if this ifile is part of platform
-@param platform The target platform. Eg, win32 or linux/i686/gcc/3.3
-@return Returns True if the ifile is in the platform.
+        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
+        @return Returns True if the ifile is in the platform.
         """
-        if self.platform_path == 'common':
+        if self.platform_path[0] == 'common':
             return True
         req_platform_path = platform.split('/')
         #print "platform:",req_platform_path
@@ -96,21 +95,20 @@ def is_match(self, platform):
                 return False
         #print "match!"
         return True
-                               
 
     def fetch_local(self):
-        print "Looking for:",self.filename
+        #print "Looking for:",self.filename
         if not os.path.exists(self.filename):
-            print "not there -- fetching"
-        elif self.md5sum and not self._is_md5_match():
-            print "Found, but md5 does not match."
+            pass
+        elif self.md5sum and not self._is_md5sum_match():
+            print "md5 mismatch:", self.filename
             os.remove(self.filename)
         else:
-            print "Found matching package"
+            print "Found matching package:", self.filename
             return
         print "Downloading",self.url,"to local file",self.filename
         urllib.urlretrieve(self.url, self.filename)
-        if self.md5sum and not self._is_md5_match():
+        if self.md5sum and not self._is_md5sum_match():
             raise RuntimeError("Error matching md5 for %s" % self.url)
 
 class LicenseDefinition(object):
@@ -121,7 +119,7 @@ def __init__(self, definition):
         #   blessed : ...
         # }
         self._definition = definition
-    
+
 
 class BinaryDefinition(object):
     def __init__(self, definition):
@@ -138,7 +136,7 @@ def _ifiles_from(self, tree, pkgname, cache_dir):
 
     def _ifiles_from_path(self, tree, pkgname, cache_dir, path):
         ifiles = []
-        if tree.has_key('url'):
+        if 'url' in tree:
             ifiles.append(InstallFile(
                 pkgname,
                 tree['url'],
@@ -159,10 +157,10 @@ def _ifiles_from_path(self, tree, pkgname, cache_dir, path):
 
     def ifiles(self, pkgname, platform, cache_dir):
         """@brief return a list of appropriate InstallFile instances to install
-@param pkgname The name of the package to be installed, eg 'tut'
-@param platform The target platform. Eg, win32 or linux/i686/gcc/3.3
-@param cache_dir The directory to cache downloads.
-@return Returns a list of InstallFiles which are part of this install
+        @param pkgname The name of the package to be installed, eg 'tut'
+        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
+        @param cache_dir The directory to cache downloads.
+        @return Returns a list of InstallFiles which are part of this install
         """
         if 'packages' not in self._definition:
             return []
@@ -172,13 +170,16 @@ def ifiles(self, pkgname, platform, cache_dir):
             cache_dir)
         if platform == 'all':
             return all_ifiles
-        return [ifile for ifile in all_ifiles if ifile.is_match(platform)]
+        #print "Considering", len(all_ifiles), "packages for", pkgname
+        # split into 2 lines because pychecker thinks it might return none.
+        files = [ifile for ifile in all_ifiles if ifile.is_match(platform)]
+        return files
 
 class InstalledPackage(object):
     def __init__(self, definition):
         # looks like:
-        # { url1 : [file1,file2,...],
-        #   url2 : [file1,file2,...],...
+        # { url1 : { files: [file1,file2,...], md5sum:... },
+        #   url2 : { files: [file1,file2,...], md5sum:... },...
         # }
         self._installed = {}
         for url in definition:
@@ -188,13 +189,23 @@ def urls(self):
         return self._installed.keys()
 
     def files_in(self, url):
-        return self._installed[url]
+        return self._installed[url].get('files', [])
+
+    def get_md5sum(self, url):
+        return self._installed[url].get('md5sum', None)
 
     def remove(self, url):
         self._installed.pop(url)
 
     def add_files(self, url, files):
-        self._installed[url] = files
+        if url not in self._installed:
+            self._installed[url] = {}
+        self._installed[url]['files'] = files
+
+    def set_md5sum(self, url, md5sum):
+        if url not in self._installed:
+            self._installed[url] = {}
+        self._installed[url]['md5sum'] = md5sum
 
 class Installer(object):
     def __init__(self, install_filename, installed_filename, dryrun):
@@ -203,17 +214,17 @@ def __init__(self, install_filename, installed_filename, dryrun):
         self._installed_filename = installed_filename
         self._installed_changed = False
         self._dryrun = dryrun
-        self._binaries = {}
+        self._installables = {}
         self._licenses = {}
         self._installed = {}
         self.load()
 
     def load(self):
         if os.path.exists(self._install_filename):
-            install = llsd.parse(file(self._install_filename).read())
+            install = llsd.parse(file(self._install_filename, 'rb').read())
             try:
                 for name in install['binaries']:
-                    self._binaries[name] = BinaryDefinition(
+                    self._installables[name] = BinaryDefinition(
                         install['binaries'][name])
             except KeyError:
                 pass
@@ -223,7 +234,7 @@ def load(self):
             except KeyError:
                 pass
         if os.path.exists(self._installed_filename):
-            installed = llsd.parse(file(self._installed_filename).read())
+            installed = llsd.parse(file(self._installed_filename, 'rb').read())
             try:
                 bins = installed['binaries']
                 for name in bins:
@@ -234,7 +245,7 @@ def load(self):
     def _write(self, filename, state):
         print "Writing state to",filename
         if not self._dryrun:
-            file(filename, 'w').write(llsd.format_xml(state))
+            file(filename, 'wb').write(llsd.format_pretty_xml(state))
 
     def save(self):
         if self._install_changed:
@@ -242,10 +253,10 @@ def save(self):
             state['licenses'] = {}
             for name in self._licenses:
                 state['licenses'][name] = self._licenses[name]._definition
-            #print "self._binaries:",self._binaries
+            #print "self._installables:",self._installables
             state['binaries'] = {}
-            for name in self._binaries:
-                state['binaries'][name] = self._binaries[name]._definition
+            for name in self._installables:
+                state['binaries'][name] = self._installables[name]._definition
             self._write(self._install_filename, state)
         if self._installed_changed:
             state = {}
@@ -256,92 +267,146 @@ def save(self):
                 bin[name] = self._installed[name]._installed
             self._write(self._installed_filename, state)
 
-    def is_license_info_valid(self):
-        valid = True
-        for bin in self._binaries:
-            binary = self._binaries[bin]._definition
-            if not binary.has_key('license'):
-                valid = False
-                print >>sys.stderr, "No license info for binary", bin + '.'
-                continue
-            if binary['license'] not in self._licenses:
-                valid = False
-                lic = binary['license']
-                print >>sys.stderr, "Missing license info for '" + lic + "'",
-                print >>sys.stderr, 'in binary', bin + '.'
-        return valid
+    def is_valid_license(self, bin):
+        "@brief retrun true if we have valid license info for binary."
+        binary = self._installables[bin]._definition
+        if 'license' not in binary:
+            print >>sys.stderr, "No license info found for", bin
+            print >>sys.stderr, 'Please add the license with the',
+            print >>sys.stderr, '--add-installable option. See', sys.argv[0], '--help'
+            return False
+        if binary['license'] not in self._licenses:
+            lic = binary['license']
+            print >>sys.stderr, "Missing license info for '" + lic + "'.",
+            print >>sys.stderr, 'Please add the license with the',
+            print >>sys.stderr, '--add-license option. See', sys.argv[0],
+            print >>sys.stderr, '--help'
+            return False
+        return True
+
+    def list_installables(self):
+        "Return a list of all known binaries."
+        return self._installables.keys()
 
     def detail_binary(self, name):
         "Return a binary definition detail"
-        try:
-            detail = self._binaries[name]._definition
-            return detail
-        except KeyError:
-            return None
+        return self._installables[name]._definition
+
+    def list_licenses(self):
+        "Return a list of all known licenses."
+        return self._licenses.keys()
 
-    def _update_field(self, binary, field):
+    def detail_license(self, name):
+        "Return a license definition detail"
+        return self._licenses[name]._definition
+
+    def list_installed(self):
+        "Return a list of installed packages."
+        return self._installed.keys()
+
+    def _update_field(self, binary, field, value):
         """Given a block and a field name, add or update it.
         @param binary[in,out] a dict containing all the details about a binary.
         @param field the name of the field to update.
+        @param value the value of the field to update; if omitted, interview
+                     will ask for value.
         """
-        if binary.has_key(field):
-            print "Update value for '" + field + "'"
-            print "(Leave blank to keep current value)"
-            print "Current Value:  '" + binary[field] + "'"
-        else:
-            print "Specify value for '" + field + "'"
-        value = raw_input("Enter New Value: ")
-        if binary.has_key(field) and not value:
-            pass
-        elif value:
+        if value:
             binary[field] = value
+        else:
+            if field in binary:
+                print "Update value for '" + field + "'"
+                print "(Leave blank to keep current value)"
+                print "Current Value:  '" + binary[field] + "'"
+            else:
+                print "Specify value for '" + field + "'"
+            new_value = raw_input("Enter New Value: ")
+            if field in binary and not new_value:
+                pass
+            elif new_value:
+                binary[field] = new_value
 
-    def _add_package(self, binary):
-        """Add an url for a platform path to the binary.
-        @param binary[in,out] a dict containing all the details about a binary."""
-        print """\
-Please enter a new package location and url. Some examples:
-common -- specify a package for all platforms
-linux -- specify a package for all arch and compilers on linux
-darwin/universal -- specify a mac os x universal
-win32/i686/vs/2003 -- specify a windows visual studio 2003 package"""
-        target = raw_input("Package path: ")
-        url = raw_input("Package URL:  ")
-        md5sum = raw_input("Package md5:  ")
-        path = target.split('/')
-        if not binary.has_key('packages'):
+        self._install_changed = True
+        return True
+
+    def _update_installable(self, name, platform, url, md5sum):
+        """Update installable entry with specific package information.
+        @param binary[in,out] a dict containing all the details about a binary.
+        @param platform Platform info, i.e. linux/i686, windows/i686 etc.
+        @param url URL of tar file
+        @param md5sum md5sum of tar file
+        """
+        binary  = self._installables[name]._definition
+        path = platform.split('/')
+        if 'packages' not in  binary:
             binary['packages'] = {}
         update = binary['packages']
         for child in path:
-            if not update.has_key(child):
+            if child not in update:
                 update[child] = {}
             parent = update
             update = update[child]
         parent[child]['url'] = llsd.uri(url)
         parent[child]['md5sum'] = md5sum
 
-    def adopt_binary(self, name):
-        "Interactively pull a new binary into the install"
-        if not self._binaries.has_key(name):
-            print "Adding binary '" + name + "'."
-            self._binaries[name] = BinaryDefinition({})
+        self._install_changed = True
+        return True
+
+
+    def add_installable_package(self, name, **kwargs):
+        """Add an url for a platform path to the binary.
+        @param binary[in,out] a dict containing all the details about a binary.
+        """
+        platform_help_str = """\
+Please enter a new package location and url. Some examples:
+common -- specify a package for all platforms
+linux -- specify a package for all arch and compilers on linux
+darwin/universal -- specify a mac os x universal
+windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
+        if name not in self._installables:
+            print "Error: must add library with --add-installable or " \
+                  +"--add-installable-metadata before using " \
+                  +"--add-installable-package option"
+            return False
         else:
             print "Updating binary '" + name + "'."
-        binary  = self._binaries[name]._definition
+        for arg in ('platform', 'url', 'md5sum'):
+            if not kwargs[arg]:
+                if arg == 'platform': print platform_help_str
+                kwargs[arg] = raw_input("Package "+arg+":")
+        path = kwargs['platform'].split('/')
+
+        return self._update_installable(name, kwargs['platform'], 
+                        kwargs['url'], kwargs['md5sum'])
+
+    def add_installable_metadata(self, name, **kwargs):
+        """Interactively add (only) library metadata into install, 
+        w/o adding binary"""
+        if name not in self._installables:
+            print "Adding installable '" + name + "'."
+            self._installables[name] = BinaryDefinition({})
+        else:
+            print "Updating installable '" + name + "'."
+        binary  = self._installables[name]._definition
         for field in ('copyright', 'license', 'description'):
-            self._update_field(binary, field)
-        self._add_package(binary)
-        print "Adopted binary '" + name + "':"
-        pprint.pprint(self._binaries[name])
-        self._install_changed = True
+            self._update_field(binary, field, kwargs[field])
+        print "Added installable '" + name + "':"
+        pprint.pprint(self._installables[name])
+
         return True
 
-    def orphan_binary(self, name):
-        self._binaries.pop(name)
+    def add_installable(self, name, **kwargs):
+        "Interactively pull a new binary into the install"
+        ret_a = self.add_installable_metadata(name, **kwargs)
+        ret_b = self.add_installable_package(name, **kwargs)
+        return (ret_a and ret_b)
+
+    def remove_installable(self, name):
+        self._installables.pop(name)
         self._install_changed = True
 
     def add_license(self, name, text, url):
-        if self._licenses.has_key(name):
+        if name in self._licenses:
             print "License '" + name + "' being overwritten."
         definition = {}
         if url:
@@ -358,47 +423,77 @@ def remove_license(self, name):
         self._licenses.pop(name)
         self._install_changed = True
 
-    def _determine_install_set(self, ifiles):
-        """@brief determine what to install
-@param ifiles A list of InstallFile instances which are necessary for this install
-@return Returns the tuple (ifiles to install, ifiles to remove)"""
-        installed_list = []
-        for package in self._installed:
-            installed_list.extend(self._installed[package].urls())
-        installed_set = set(installed_list)
-        #print "installed_set:",installed_set
-        install_list = [ifile.url for ifile in ifiles]
-        install_set = set(install_list)
-        #print "install_set:",install_set
-        remove_set = installed_set.difference(install_set)
-        to_remove = [ifile for ifile in ifiles if ifile.url in remove_set]
-        #print "to_remove:",to_remove
-        install_set = install_set.difference(installed_set)
-        to_install = [ifile for ifile in ifiles if ifile.url in install_set]
-        #print "to_install:",to_install
-        return to_install, to_remove
-
-    def _build_ifiles(self, platform, cache_dir):
-        """@brief determine what files to install and remove
-@param platform The target platform. Eg, win32 or linux/i686/gcc/3.3
-@param cache_dir The directory to cache downloads.
-@return Returns the tuple (ifiles to install, ifiles to remove)"""
-        ifiles = []
-        for bin in self._binaries:
-            ifiles.extend(self._binaries[bin].ifiles(bin, platform, cache_dir))
-        return self._determine_install_set(ifiles)
-        
-    def _remove(self, to_remove):
+    def _uninstall(self, binaries):
+        """@brief Do the actual removal of files work.
+        *NOTE: This method is not transactionally safe -- ie, if it
+        raises an exception, internal state may be inconsistent. How
+        should we address this?
+        @param binaries The package names to remove
+        """
         remove_file_list = []
-        for ifile in to_remove:
-            remove_file_list.extend(
-                self._installed[ifile.pkgname].files_in(ifile.url))
-            self._installed[ifile.pkgname].remove(ifile.url)
-            self._installed_changed = True
+        for pkgname in binaries:
+            for url in self._installed[pkgname].urls():
+                remove_file_list.extend(
+                    self._installed[pkgname].files_in(url))
+                self._installed[pkgname].remove(url)
+                if not self._dryrun:
+                    self._installed_changed = True
+            if not self._dryrun:
+                self._installed.pop(pkgname)
+        remove_dir_set = set()
         for filename in remove_file_list:
             print "rm",filename
             if not self._dryrun:
-                os.remove(filename)
+                if os.path.exists(filename):
+                    remove_dir_set.add(os.path.dirname(filename))
+                    os.remove(filename)
+        for dirname in remove_dir_set:
+            try:
+                os.removedirs(dirname)
+            except OSError:
+                # This is just for cleanup, so we don't care about
+                # normal failures.
+                pass
+
+    def uninstall(self, binaries, install_dir):
+        """@brief Remove the packages specified.
+        @param binaries The package names to remove
+        @param install_dir The directory to work from
+        """
+        print "uninstall",binaries,"from",install_dir
+        cwd = os.getcwdu()
+        os.chdir(install_dir)
+        try:
+            self._uninstall(binaries)
+        finally:
+            os.chdir(cwd)
+
+    def _build_ifiles(self, platform, cache_dir):
+        """@brief determine what files to install
+        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
+        @param cache_dir The directory to cache downloads.
+        @return Returns the ifiles to install
+        """
+        ifiles = []
+        for bin in self._installables:
+            ifiles.extend(self._installables[bin].ifiles(bin, platform, cache_dir))
+        to_install = []
+        #print "self._installed",self._installed
+        for ifile in ifiles:
+            if ifile.pkgname not in self._installed:
+                to_install.append(ifile)
+            elif ifile.url not in self._installed[ifile.pkgname].urls():
+                to_install.append(ifile)
+            elif ifile.md5sum != self._installed[ifile.pkgname].get_md5sum(ifile.url):
+                # *TODO: We may want to uninstall the old version too
+                # when we detect it is installed, but the md5 sum is
+                # different.
+                to_install.append(ifile)
+            else:
+                #print "Installation up to date:",ifile.pkgname,ifile.platform_path
+                pass
+        #print "to_install",to_install
+        return to_install
 
     def _install(self, to_install, install_dir):
         for ifile in to_install:
@@ -411,30 +506,40 @@ def _install(self, to_install, install_dir):
                     tar.extractall(path=install_dir)
                 except AttributeError:
                     _extractall(tar, path=install_dir)
-            if self._installed.has_key(ifile.pkgname):
-                self._installed[ifile.pkgname].add_files(ifile.url, tar.getnames())
+            if ifile.pkgname in self._installed:
+                self._installed[ifile.pkgname].add_files(
+                    ifile.url,
+                    tar.getnames())
+                self._installed[ifile.pkgname].set_md5sum(
+                    ifile.url,
+                    ifile.md5sum)
             else:
                 # *HACK: this understands the installed package syntax.
-                definition = { ifile.url : tar.getnames() }
+                definition = { ifile.url :
+                               {'files': tar.getnames(),
+                                'md5sum' : ifile.md5sum } }
                 self._installed[ifile.pkgname] = InstalledPackage(definition)
             self._installed_changed = True
 
-    def do_install(self, platform, install_dir, cache_dir):
+    def install(self, binaries, platform, install_dir, cache_dir):
         """@brief Do the installation for for the platform.
-@param platform The target platform. Eg, win32 or linux/i686/gcc/3.3
-@param install_dir The root directory to install into. Created if missing.
-@param cache_dir The directory to cache downloads. Created if missing."""
-        if not self._binaries:
-            raise RuntimeError("No binaries to install. Please add them.")
+        @param binaries The requested binaries to install.
+        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
+        @param install_dir The root directory to install into. Created
+        if missing.
+        @param cache_dir The directory to cache downloads. Created if
+        missing.
+        """
+        # The ordering of steps in the method is to help reduce the
+        # likelihood that we break something.
         _mkdir(install_dir)
         _mkdir(cache_dir)
-        to_install, to_remove = self._build_ifiles(platform, cache_dir)
+        to_install = self._build_ifiles(platform, cache_dir)
 
-        # we do this in multiple steps reduce the likelyhood to have a
-        # bad install.
+        # Filter for files which we actually requested to install.
+        to_install = [ifl for ifl in to_install if ifl.pkgname in binaries]
         for ifile in to_install:
             ifile.fetch_local()
-        self._remove(to_remove)
         self._install(to_install, install_dir)
 
 
@@ -485,43 +590,69 @@ def _extractall(tar, path=".", members=None):
 
 def _mkdir(directory):
     "Safe, repeatable way to make a directory."
-    try:
+    if not os.path.exists(directory):
         os.makedirs(directory)
-    except OSError, e:
-        if e[0] != errno.EEXIST:
-            raise
 
 def _get_platform():
     "Return appropriate platform packages for the environment."
     platform_map = {
         'darwin': 'darwin',
         'linux2': 'linux',
-        'win32' : 'win32',
-        'cygwin' : 'win32',
+        'win32' : 'windows',
+        'cygwin' : 'windows',
         'solaris' : 'solaris'
         }
     return platform_map[sys.platform]
 
-def main():
+def _getuser():
+    "Get the user"
+    try:
+        # Unix-only.
+        import getpass
+        return getpass.getuser()
+    except ImportError:
+        import win32api
+        return win32api.GetUserName()
+
+def _default_binary_cache():
+    """In general, the binary files do not change much, so find a host/user
+    specific location to cache files."""
+    user = _getuser()
+    cache_dir = "/var/tmp/%s/install.cache" % user
+    if _get_platform() == 'windows':
+        import tempfile
+        cache_dir = os.path.join(tempfile.gettempdir(), \
+                                 'install.cache.%s' % user)
+    return cache_dir
+
+
+def parse_args():
     parser = optparse.OptionParser(
-        usage="usage: %prog [options]",
+        usage="usage: %prog [options] [binary1 [binary2 [binary3...]]]",
         formatter = helpformatter.Formatter(),
         description="""This script fetches and installs binary packages.
+It also handles uninstalling those packages and manages the mapping between
+packages and their license.
 
 The process is to open and read an install manifest file which specifies
-what files should be installed. For each file in the manifest:
+what files should be installed. For each binary to be installed.
  * make sure it has a license
  * check the installed version
  ** if not installed and needs to be, download and install
  ** if installed version differs, download & install
 
+If no binaries are specified on the command line, then the defaut
+behavior is to install all known binaries appropriate for the platform
+specified or uninstall all binaries if --uninstall is set. You can specify
+more than one binary on the command line.
+
 When specifying a platform, you can specify 'all' to install all
 packages, or any platform of the form:
 
 OS[/arch[/compiler[/compiler_version]]]
 
 Where the supported values for each are:
-OS: darwin, linux, win32, solaris
+OS: darwin, linux, windows, solaris
 arch: i686, x86_64, ppc, universal
 compiler: vs, gcc
 compiler_version: 2003, 2005, 2008, 3.3, 3.4, 4.0, etc.
@@ -529,8 +660,8 @@ def main():
 No checks are made to ensure a valid combination of platform
 parts. Some exmples of valid platforms:
 
-win32
-win32/i686/vs/2005
+windows
+windows/i686/vs/2005
 linux/x86_64/gcc/3.3
 linux/x86_64/gcc/4.0
 darwin/universal/gcc/4.0
@@ -553,31 +684,55 @@ def main():
         default=join(base_dir, 'installed.xml'),
         dest='installed_filename',
         help='The file used to record what is installed.')
+    parser.add_option(
+        '--export-manifest', 
+        action='store_true',
+        default=False,
+        dest='export_manifest',
+        help="Print the install manifest to stdout and exit.")
     parser.add_option(
         '-p', '--platform', 
         type='string',
         default=_get_platform(),
         dest='platform',
         help="""Override the automatically determined platform. \
-You can specify 'all' to do a complete installation of all binaries.""")
+You can specify 'all' to do a installation of binaries for all platforms.""")
     parser.add_option(
         '--cache-dir', 
         type='string',
-        default=join(base_dir, '.install.cache'),
+        default=_default_binary_cache(),
         dest='cache_dir',
-        help='Where to download files.')
+        help='Where to download files. Default: %s'%(_default_binary_cache()))
     parser.add_option(
         '--install-dir', 
         type='string',
         default=base_dir,
         dest='install_dir',
         help='Where to unpack the installed files.')
+    parser.add_option(
+        '--list-installed', 
+        action='store_true',
+        default=False,
+        dest='list_installed',
+        help="List the installed package names and exit.")
     parser.add_option(
         '--skip-license-check', 
         action='store_false',
         default=True,
         dest='check_license',
         help="Do not perform the license check.")
+    parser.add_option(
+        '--list-licenses', 
+        action='store_true',
+        default=False,
+        dest='list_licenses',
+        help="List known licenses and exit.")
+    parser.add_option(
+        '--detail-license', 
+        type='string',
+        default=None,
+        dest='detail_license',
+        help="Get detailed information on specified license and exit.")
     parser.add_option(
         '--add-license', 
         type='string',
@@ -587,12 +742,6 @@ def main():
 license. Specify --license-url if the license is remote or specify \
 --license-text, otherwse the license text will be read from standard \
 input.""")
-    parser.add_option(
-        '--remove-license', 
-        type='string',
-        default=None,
-        dest='remove_license',
-        help="Remove a named license.")
     parser.add_option(
         '--license-url', 
         type='string',
@@ -608,33 +757,104 @@ def main():
         help="""Put the text into an added license. \
 Ignored if --add-license is not specified.""")
     parser.add_option(
-        '--orphan', 
+        '--remove-license', 
         type='string',
         default=None,
-        dest='orphan',
+        dest='remove_license',
+        help="Remove a named license.")
+    parser.add_option(
+        '--remove-installable', 
+        type='string',
+        default=None,
+        dest='remove_installable',
         help="Remove a binary from the install file.")
     parser.add_option(
-        '--adopt', 
+        '--add-installable', 
         type='string',
         default=None,
-        dest='adopt',
+        dest='add_installable',
         help="""Add a binary into the install file. Argument is the name of \
 the binary to add.""")
+    parser.add_option(
+        '--add-installable-metadata', 
+        type='string',
+        default=None,
+        dest='add_installable_metadata',
+        help="""Add package for library into the install file. Argument is \
+the name of the library to add.""")
+    parser.add_option(
+        '--installable-copyright', 
+        type='string',
+        default=None,
+        dest='installable_copyright',
+        help="""Copyright for specified new package. Ignored if \
+--add-installable is not specified.""")
+    parser.add_option(
+        '--installable-license', 
+        type='string',
+        default=None,
+        dest='installable_license',
+        help="""Name of license for specified new package. Ignored if \
+--add-installable is not specified.""")
+    parser.add_option(
+        '--installable-description', 
+        type='string',
+        default=None,
+        dest='installable_description',
+        help="""Description for specified new package. Ignored if \
+--add-installable is not specified.""")
+    parser.add_option(
+        '--add-installable-package', 
+        type='string',
+        default=None,
+        dest='add_installable_package',
+        help="""Add package for library into the install file. Argument is \
+the name of the library to add.""")
+    parser.add_option(
+        '--package-platform', 
+        type='string',
+        default=None,
+        dest='package_platform',
+        help="""Platform for specified new package. \
+Ignored if --add-installable or --add-installable-package is not specified.""")
+    parser.add_option(
+        '--package-url', 
+        type='string',
+        default=None,
+        dest='package_url',
+        help="""URL for specified package. \
+Ignored if --add-installable or --add-installable-package is not specified.""")
+    parser.add_option(
+        '--package-md5', 
+        type='string',
+        default=None,
+        dest='package_md5',
+        help="""md5sum for new package. \
+Ignored if --add-installable or --add-installable-package is not specified.""")
     parser.add_option(
         '--list', 
         action='store_true',
         default=False,
-        dest='list_binaries',
-        help="List the binaries in the install manifest")
+        dest='list_installables',
+        help="List the binaries in the install manifest and exit.")
     parser.add_option(
-        '--details', 
+        '--detail', 
         type='string',
         default=None,
         dest='detail_binary',
-        help="Get detailed information on specified binary.")
-    options, args = parser.parse_args()
-
+        help="Get detailed information on specified binary and exit.")
+    parser.add_option(
+        '--uninstall', 
+        action='store_true',
+        default=False,
+        dest='uninstall',
+        help="""Remove the binaries specified in the arguments. Just like \
+during installation, if no binaries are listed then all installed binaries \
+are removed.""")
+    return parser.parse_args()
 
+def main():
+    options, args = parse_args()
     installer = Installer(
         options.install_filename,
         options.installed_filename,
@@ -643,18 +863,40 @@ def main():
     #
     # Handle the queries for information
     #
-    if options.list_binaries:
-        print "binary list:",installer._binaries.keys()
+    if options.list_installed:
+        print "installed list:", installer.list_installed()
+        return 0
+    if options.list_installables:
+        print "binary list:", installer.list_installables()
         return 0
     if options.detail_binary:
-        detail = installer.detail_binary(options.detail_binary)
-        if detail:
+        try:
+            detail = installer.detail_binary(options.detail_binary)
             print "Detail on binary",options.detail_binary+":"
             pprint.pprint(detail)
-        else:
+        except KeyError:
             print "Bianry '"+options.detail_binary+"' not found in",
             print "install file."
         return 0
+    if options.list_licenses:
+        print "license list:", installer.list_licenses()
+        return 0
+    if options.detail_license:
+        try:
+            detail = installer.detail_license(options.detail_license)
+            print "Detail on license",options.detail_license+":"
+            pprint.pprint(detail)
+        except KeyError:
+            print "License '"+options.detail_binary+"' not defined in",
+            print "install file."
+        return 0
+    if options.export_manifest:
+        # *HACK: just re-parse the install manifest and pretty print
+        # it. easier than looking at the datastructure designed for
+        # actually determining what to install
+        install = llsd.parse(file(options.install_filename, 'rb').read())
+        pprint.pprint(install)
+        return 0
 
     #
     # Handle updates -- can only do one of these
@@ -668,26 +910,70 @@ def main():
             return 1
     elif options.remove_license:
         installer.remove_license(options.remove_license)
-    elif options.orphan:
-        installer.orphan_binary(options.orphan)
-    elif options.adopt:
-        if not installer.adopt_binary(options.adopt):
+    elif options.remove_installable:
+        installer.remove_installable(options.remove_installable)
+    elif options.add_installable:
+        if not installer.add_installable(
+            options.add_installable,
+            copyright=options.installable_copyright,
+            license=options.installable_license,
+            description=options.installable_description,
+            platform=options.package_platform,
+            url=options.package_url,
+            md5sum=options.package_md5):
             return 1
+    elif options.add_installable_metadata:
+        if not installer.add_installable_metadata(
+            options.add_installable_metadata,
+            copyright=options.installable_copyright,
+            license=options.installable_license,
+            description=options.installable_description):
+            return 1
+    elif options.add_installable_package:
+        if not installer.add_installable_package(
+            options.add_installable_package,
+            platform=options.package_platform,
+            url=options.package_url,
+            md5sum=options.package_md5):
+            return 1
+    elif options.uninstall:
+        # Do not bother to check license if we're uninstalling.
+        all_installed = installer.list_installed()
+        if not len(args):
+            uninstall_installables = all_installed
+        else:
+            # passed in on the command line. We'll need to verify we
+            # know about them here.
+            uninstall_installables = args
+            for binary in uninstall_installables:
+                if binary not in all_installed:
+                    raise RuntimeError('Binary not installed: %s' % (binary,))
+        installer.uninstall(uninstall_installables, options.install_dir)
     else:
+        # Determine what binaries should be installed. If they were
+        # passed in on the command line, use them, otherwise install
+        # all known binaries.
+        all_installables = installer.list_installables()
+        if not len(args):
+            install_installables = all_installables
+        else:
+            # passed in on the command line. We'll need to verify we
+            # know about them here.
+            install_installables = args
+            for binary in install_installables:
+                if binary not in all_installables:
+                    raise RuntimeError('Unknown binary: %s' % (binary,))
         if options.check_license:
-            if not installer.is_license_info_valid():
-                print >>sys.stderr, 'Please add or correct the license',
-                print >>sys.stderr, 'information in',
-                print >>sys.stderr, options.install_filename + '.'
-                print >>sys.stderr, "You can also use the --add-license",
-                print >>sys.stderr, "option. See", sys.argv[0], "--help"
-                return 1
-
-        # *TODO: check against a list of 'known good' licenses.
-        # *TODO: check for urls which conflict -- will lead to
-        # problems.
-
-        installer.do_install(
+            # *TODO: check against a list of 'known good' licenses.
+            # *TODO: check for urls which conflict -- will lead to
+            # problems.
+            for binary in install_installables:
+                if not installer.is_valid_license(binary):
+                    return 1
+
+        # Do the work of installing the requested binaries.
+        installer.install(
+            install_installables,
             options.platform,
             options.install_dir,
             options.cache_dir)
@@ -697,4 +983,5 @@ def main():
     return 0
 
 if __name__ == '__main__':
+    #print sys.argv
     sys.exit(main())