diff --git a/.gitignore b/.gitignore
index c14decfd1a6ff1fb0c3ab55adc7b3737e3c3cdbe..68653b63227255ac2dcc5af0e5c10c549b5d36ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ build*/
 samples/sample
 _sample*.txt
 tmp
+MANIFEST
diff --git a/bindings/python/README.pypi-src b/bindings/python/README.pypi-src
new file mode 100644
index 0000000000000000000000000000000000000000..603dd9da6e3952618d32183aa3b771282f05c36e
--- /dev/null
+++ b/bindings/python/README.pypi-src
@@ -0,0 +1,40 @@
+NOTE: This PyPi package "keystone-engine" includes source code of the core of Keystone.
+So installing this would also compile the core with C compiler (either "gcc" or
+"msvc" on Windows).
+
+On Windows, CMake & MSVC needs compiler environmental setup, you would need to either
+run "pip install keystone-engine" or "python setup.py install" from "Developer Command
+Prompt".
+
+For Windows, if you do not want to compile the core, try the "keystone-engine-windows"
+package instead, which already includes the prebuilt "keystone.dll" inside.
+
+    https://pypi.python.org/pypi/keystone-engine-windows
+
+--------------------------------------------------------------------------------
+
+Keystone is a lightweight multi-platform, multi-architecture assembler framework.
+It offers some unparalleled features:
+
+- Multi-architecture, with support for Arm, Arm64 (AArch64/Armv8), Hexagon, Mips, PowerPC, Sparc, SystemZ & X86 (include 16/32/64bit).
+- Clean/simple/lightweight/intuitive architecture-neutral API.
+- Implemented in C/C++ languages, with bindings for Python, NodeJS, Ruby, Go, Rust, Haskell & OCaml available.
+- Native support for Windows & \*nix (with Mac OSX, Linux, *BSD & Solaris confirmed).
+- Thread-safe by design.
+- Open source - with a dual license.
+
+Further information is available at http://www.keystone-engine.org
+
+
+[License]
+
+Keystone is available under a dual license:
+
+- Version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.).
+  License information can be found in the COPYING and the EXCEPTIONS-CLIENT.
+
+  This combination allows almost all of open source projects to use Keystone without conflicts.
+
+- For commercial usage in production environments, contact the authors of Keystone to buy a royalty-free license.
+
+  See LICENSE-COM.TXT for more information.
diff --git a/bindings/python/setup.cfg b/bindings/python/setup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..5e722cbb8b69a5d8650cb54cd728f905e9900c89
--- /dev/null
+++ b/bindings/python/setup.cfg
@@ -0,0 +1,2 @@
+[metadata]
+description-file = README.pypi-src
diff --git a/bindings/python/setup.py b/bindings/python/setup.py
index 0764c7eba9afa70d2db4f454ce6c6cd2429c6bf2..ca87513ad8431f35390b7e4498830dec72ed1d43 100755
--- a/bindings/python/setup.py
+++ b/bindings/python/setup.py
@@ -19,12 +19,12 @@ from distutils.sysconfig import get_python_lib
 PATH_LIB64 = "prebuilt/win64/keystone.dll"
 PATH_LIB32 = "prebuilt/win32/keystone.dll"
 
-# package name can be 'keystone' or 'keystone-windows'
-PKG_NAME = 'keystone'
+# package name can be 'keystone-engine' or 'keystone-engine-windows'
+PKG_NAME = 'keystone-engine'
 if os.path.exists(PATH_LIB64) and os.path.exists(PATH_LIB32):
-    PKG_NAME = 'keystone-windows'
+    PKG_NAME = 'keystone-engine-windows'
 
-VERSION = '0.9'
+VERSION = '0.9.1-2'
 SYSTEM = sys.platform
 
 # virtualenv breaks import, but get_python_lib() will work.
@@ -55,7 +55,7 @@ def copy_sources():
     except (IOError, OSError):
         pass
 
-    dir_util.copy_tree("../../arch", "src/arch/")
+    dir_util.copy_tree("../../llvm", "src/llvm/")
     dir_util.copy_tree("../../include", "src/include/")
 
     src.extend(glob.glob("../../*.h"))
@@ -63,12 +63,20 @@ def copy_sources():
     src.extend(glob.glob("../../*.inc"))
     src.extend(glob.glob("../../*.def"))
 
-    src.extend(glob.glob("../../Makefile"))
+    src.extend(glob.glob("../../CMakeLists.txt"))
+    src.extend(glob.glob("../../CMakeUninstall.in"))
     src.extend(glob.glob("../../*.txt"))
     src.extend(glob.glob("../../*.TXT"))
+    src.extend(glob.glob("../../COPYING"))
     src.extend(glob.glob("../../LICENSE*"))
+    src.extend(glob.glob("../../EXCEPTIONS-CLIENT"))
     src.extend(glob.glob("../../README.md"))
     src.extend(glob.glob("../../RELEASE_NOTES"))
+    src.extend(glob.glob("../../ChangeLog"))
+    src.extend(glob.glob("../../SPONSORS.TXT"))
+    src.extend(glob.glob("../../*.cmake"))
+    src.extend(glob.glob("../../*.sh"))
+    src.extend(glob.glob("../../*.bat"))
 
     for filename in src:
         outpath = os.path.join("./src/", os.path.basename(filename))
@@ -125,7 +133,10 @@ class custom_build_clib(build_clib):
             for (lib_name, build_info) in libraries:
                 log.info("building '%s' library", lib_name)
 
+                # cd src/build
                 os.chdir("src")
+                os.mkdir("build")
+                os.chdir("build")
 
                 # platform description refers at https://docs.python.org/2/library/sys.html#sys.platform
                 if SYSTEM == "cygwin":
@@ -134,16 +145,17 @@ class custom_build_clib(build_clib):
                         os.system("KEYSTONE_BUILD_CORE_ONLY=yes ./make.sh cygwin-mingw64")
                     else:
                         os.system("KEYSTONE_BUILD_CORE_ONLY=yes ./make.sh cygwin-mingw32")
-                    SETUP_DATA_FILES.append("src/keystone.dll")
+                    SETUP_DATA_FILES.append("src/build/keystone.dll")
                 else:   # Unix
-                    os.chmod("make.sh", stat.S_IREAD|stat.S_IEXEC)
-                    os.system("KEYSTONE_BUILD_CORE_ONLY=yes ./make.sh")
+                    os.chmod("../make-share.sh", stat.S_IREAD|stat.S_IEXEC)
+                    os.system("../make-share.sh lib_only")
                     if SYSTEM == "darwin":
-                        SETUP_DATA_FILES.append("src/libkeystone.dylib")
+                        SETUP_DATA_FILES.append("src/build/llvm/lib/libkeystone.dylib")
                     else:   # Non-OSX
-                        SETUP_DATA_FILES.append("src/libkeystone.so")
+                        SETUP_DATA_FILES.append("src/build/llvm/lib/libkeystone.so")
 
-                os.chdir("..")
+                # back to root dir
+                os.chdir("../..")
         except:
             pass