diff --git a/CMakeLists.txt b/CMakeLists.txt
index ccdeefbe38d122df714110ab4e4e6d04a041b8ab..d72d8060469570ad5eb331f889169cb15c985af8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,41 +1,62 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-PROJECT(moose)
-
-## Default install prefix. When building packages, such as on launchpad, we need
-## to modify installation prefix.
-if(DEVELOPER)
-    option(CMAKE_INSTALL_PREFIX "Install prefix" ${CMAKE_BINARY_DIR}/_install)
-else()
-    option(CMAKE_INSTALL_PREFIX "Install prefix" /usr)
-endif()
+PROJECT(moose-all)
 
 ## intialize paths
 set(MOOSE_CORE_DIR "${CMAKE_SOURCE_DIR}/moose-core")
 set(MOOSE_CORE_BUILD_DIR ${CMAKE_BINARY_DIR}/_build_moose_core)
-set(MOOSE_CORE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}")
+FILE(MAKE_DIRECTORY ${MOOSE_CORE_BUILD_DIR})
 set(DATA_DIR ${CMAKE_SOURCE_DIR}/data)
 
-include(ExternalProject)
-message("[INFO] Installtion directory is ${CMAKE_INSTALL_PREFIX}")
-ExternalProject_Add( moose-core
-    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/__moose-core
-    SOURCE_DIR ${MOOSE_CORE_DIR}
-    # Extremely useful in packaging
-    #BINARY_DIR ${MOOSE_CORE_INSTALL_DIR}
-    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-    TEST_COMMAND ctest --output-on-failure
-    TEST_BEFORE_INSTALL 1
-    BUILD_IN_SOURCE 0
-) 
+add_custom_command(OUTPUT __moose_core_built__
+    COMMAND ${CMAKE_COMMAND} 
+        -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
+        -DDEBUG=OFF
+        ${MOOSE_CORE_DIR}
+    COMMAND $(MAKE)
+    WORKING_DIRECTORY ${MOOSE_CORE_BUILD_DIR}
+    VERBATIM
+    )
+
+add_custom_target(moose-all ALL
+    DEPENDS __moose_core_built__
+    )
+
+install(CODE
+    "
+    execute_process(COMMAND ctest --output-on-failure
+        WORKING_DIRECTORY ${MOOSE_CORE_BUILD_DIR})
+
+    execute_process(COMMAND ${CMAKE_COMMAND} install
+        WORKING_DIRECTORY ${MOOSE_CORE_BUILD_DIR})
+    "
+    )
 
 ## moose-gui
 ## TODO: moose-gui should be a python module.
 set(MOOSE_GUI_DIR ${CMAKE_SOURCE_DIR}/moose-gui)
-set(MOOSE_GUI_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/moose/gui)
-add_custom_target(moose-gui ALL)
-add_custom_command(TARGET moose-gui
-    POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy_directory ${MOOSE_GUI_DIR} ${MOOSE_GUI_INSTALL_DIR}
-    COMMAND ${CMAKE_COMMAND} -E copy ${DATA_DIR}/moosegui ${CMAKE_INSTALL_PREFIX}/bin/
+
+install(DIRECTORY ${MOOSE_GUI_DIR}
+    PATTERN ".git" EXCLUDE
+    DESTINATION lib/moose/gui
     )
 
+install(PROGRAMS ${DATA_DIR}/moosegui
+    DESTINATION bin
+    )
+
+## UNINSTALL
+add_custom_target(uninstall 
+    DEPENDS __uninstall_moose-core__ __uninstall_moose-gui__
+    )
+
+add_custom_command(OUTPUT __uninstall_moose-core__
+    COMMAND make uninstall
+    WORKING_DIRECTORY ${MOOSE_CORE_BUILD_DIR}
+    )
+
+add_custom_command(OUTPUT  __uninstall_moose-gui__
+    COMMAND ${CMAKE_COMMAND} -E remove_directory
+    ${CMAKE_INSTALL_PREFIX}/usr/lib/moose
+    COMMAND ${CMAKE_COMMAND} -R remove ${CMAKE_INSTALL_PREFIX}/bin/moosegui
+    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    )
diff --git a/README.md b/README.md
index 9d5d0a977b4aa69b89a3724c42e19bd57b4e9ae1..82b47aca35d716d7fe80e4226c7815f0633c19d3 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,17 @@ python scripting interface and its GUI.
 
 For more details about these projects, read respective README files.
 
-# Install 
-
-~~~~
-./boostrap
-cmake .
-make 
-sudo make install
-~~~~
+# Installation using cmake
+
+First, run the `bootstrap` script. It will fetch the submodules and/or update
+them. You should have `cmake` installed on your system to build and install
+moose from this repository.
+
+    cmake .
+    make 
+    sudo make install
+
+To uninstall moose, do the following in the same directory where you ran
+previous `make install` command.
+
+    sudo make uninstall
diff --git a/data/moosegui b/data/moosegui
index 4d8e95bd443965601c588a356f8a6d688db3ca07..2bd54687af0719a6dddfa2641445327053faa1bd 100755
--- a/data/moosegui
+++ b/data/moosegui
@@ -1,2 +1,2 @@
 #!/bin/bash
-( cd /usr/share/moose/gui && python mgui.py )
+( cd /usr/lib/moose/gui && python mgui.py )