diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1612c8dd55dd69605efa7d2252286df646febb5..d711ca1dd90580e50ef8183c4ca67e069b2bc45b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,6 +28,16 @@ option(WITH_CUDA "Use CUDA/GPU" OFF)
 option(WITH_MPI "Use MPI (experimental)" OFF)
 option(WITH_GUI "Install moose-gui. Works only with python2." ON )
 
+# get platform and arch using python.
+find_package( PythonInterp REQUIRED)
+execute_process( 
+    COMMAND ${PYTHON_EXECUTABLE} -c "import sys;print('%s-%s'%(sys.platform,sys.arch))"
+    OUTPUT_VARIABLE PY_PLATFORM_ARCH
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+message(STATUS "Building bdist for arch - ${PY_PLATFORM_ARCH}")
+
+
 # On python3. Do not install GUI. 
 find_package(PythonInterp REQUIRED)
 if(PYTHON_VERSION_MAJOR VERSION_EQUAL 3)
@@ -86,6 +96,11 @@ configure_file( ${CMAKE_SOURCE_DIR}/cmake/build_moose-core.sh.in
 add_custom_target( moose-core ALL DEPENDS ${OUTPUT_MOOSEBIN} )
 add_custom_command( OUTPUT ${OUTPUT_MOOSEBIN}
     COMMAND MAKE=$(MAKE) bash -c ${CMAKE_BINARY_DIR}/build_moose-core.sh
+    # Note that this command requires us to be in the same directory where we
+    # want to extract the tar file.
+    COMMAND ${CMAKE_COMMAND} -E chdir ${PYMOOSE_INSTALL_DIR}
+        tar xvf ${PYMOOSE_BUILD_DIR}/pymoose-${MOOSE_VERSION}.${PY_PLATFORM_ARCH}.tar.gz 
+    COMMENT "Building bdist and unarchiving it"
     VERBATIM
     )
 add_dependencies(moose moose-core)
@@ -114,6 +129,7 @@ endif()
 # TODO: moose-gui should be a python module.
 set(MOOSE_GUI_DIR ${CMAKE_SOURCE_DIR}/moose-gui)
 
+# Install pymoose. Use tar.gz in PYMOOSE_BUILD_DIR and unarchive it.
 install(DIRECTORY ${PYMOOSE_INSTALL_DIR}/
     DESTINATION ${CMAKE_INSTALL_PREFIX}
     PATTERN ".git" EXCLUDE
diff --git a/moose-core/CMakeLists.txt b/moose-core/CMakeLists.txt
index df0b25510ef5f8e51a8277228d2f5c1558d2ae34..3e1cddc8475d8a75a9871235dc0ab030683e0769 100644
--- a/moose-core/CMakeLists.txt
+++ b/moose-core/CMakeLists.txt
@@ -458,9 +458,20 @@ endif()
 if(NOT PYMOOSE_BDIST_DIR)
     set(PYMOOSE_BDIST_DIR ${CMAKE_BINARY_DIR}/pymoose_bdist)
 endif( )
+# get platform and arch using python.
+find_package( PythonInterp REQUIRED)
+execute_process( 
+    COMMAND ${PYTHON_EXECUTABLE} -c "import sys;print('%s-%s'%(sys.platform,sys.arch))"
+    OUTPUT_VARIABLE PY_PLATFORM_ARCH
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+# If not set, use default.
+if(NOT PY_PLATFORM_ARCH)
+    mes(PY_PLATFORM_ARCH "linux-x86_64")
+endif( )
+message(STATUS "Building bdist for arch: ${PY_PLATFORM_ARCH}")
 add_custom_target( bdist 
-    DEPENDS pymoose
-    COMMAND ${PYTHON_EXECUTABLE} setup.cmake.py bdist -d ${PYMOOSE_BDIST_DIR}
+    COMMAND ${PYTHON_EXECUTABLE} setup.cmake.py bdist -p ${PY_PLATFORM_ARCH} -d ${PYMOOSE_BDIST_DIR}
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python
     COMMENT "Genearating bdist using setup.cmake.py." 
     VERBATIM
diff --git a/moose-core/python/setup.cmake.py b/moose-core/python/setup.cmake.py
index 49eb95d6e0cef6e24bf98ca4a5d65dba2686363b..22da886d01bf295f75e044920edfebd1bcb410b6 100644
--- a/moose-core/python/setup.cmake.py
+++ b/moose-core/python/setup.cmake.py
@@ -25,15 +25,12 @@ try:
 except Exception as e:
     from distutils.core import setup
 
+# Read version from VERSION created by cmake file. This file must be present for
+# setup.cmake.py to work perfectly.
 script_dir = os.path.dirname( os.path.abspath( __file__ ) )
-version = '3.2.0-git'
-
-try:
-    with open( os.path.join( script_dir, 'VERSION'), 'r' ) as f:
-        version = f.read( )
-except Exception as e:
-    print( 'Failed to read VERSION from file due to: %s' % e )
-    print( 'Using default %s' % version )
+version = None
+with open( os.path.join( script_dir, 'VERSION'), 'r' ) as f:
+    version = f.read( )
 
 try:
     import importlib.machinery