diff --git a/CMakeLists.txt b/CMakeLists.txt
index 16c3dc6..82c0785 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@
 
 cmake_minimum_required(VERSION 2.8)
 
-project(pybind)
+project(pybind11)
 
 # Add a CMake parameter for choosing a desired Python version
 set(PYBIND_PYTHON_VERSION "" CACHE STRING "Python version to use for compiling the example application")
@@ -55,13 +55,13 @@
 
 # Create the binding library
 add_library(example SHARED
-  include/pybind/cast.h
-  include/pybind/common.h
-  include/pybind/operators.h
-  include/pybind/pybind.h
-  include/pybind/pytypes.h
-  include/pybind/typeid.h
-  include/pybind/numpy.h
+  include/pybind11/cast.h
+  include/pybind11/common.h
+  include/pybind11/operators.h
+  include/pybind11/pybind11.h
+  include/pybind11/pytypes.h
+  include/pybind11/typeid.h
+  include/pybind11/numpy.h
   example/example.cpp
   example/example1.cpp
   example/example2.cpp
diff --git a/docs/advanced.rst b/docs/advanced.rst
index 9628695..577bc04 100644
--- a/docs/advanced.rst
+++ b/docs/advanced.rst
@@ -8,9 +8,9 @@
 
 .. code-block:: cpp
 
-    #include <pybind/pybind.h>
+    #include <pybind11/pybind11.h>
 
-    namespace py = pybind;
+    namespace py = pybind11
 
 Operator overloading
 ====================
@@ -43,10 +43,10 @@
 
 .. code-block:: cpp
 
-    #include <pybind/operators.h>
+    #include <pybind11/operators.h>
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         py::class_<Vector2>(m, "Vector2")
             .def(py::init<float, float>())
@@ -79,7 +79,7 @@
 .. note::
 
     To use the more convenient ``py::self`` notation, the additional
-    header file :file:`pybind/operators.h` must be included.
+    header file :file:`pybind11/operators.h` must be included.
 
 .. seealso::
 
@@ -120,15 +120,15 @@
         };
     }
 
-After including the extra header file :file:`pybind/functional.h`, it is almost
+After including the extra header file :file:`pybind11/functional.h`, it is almost
 trivial to generate binding code for both of these functions.
 
 .. code-block:: cpp
 
-    #include <pybind/functional.h>
+    #include <pybind11/functional.h>
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         m.def("func_arg", &func_arg);
         m.def("func_ret", &func_ret);
@@ -200,7 +200,7 @@
 .. code-block:: cpp
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         py::class_<Animal> animal(m, "Animal");
         animal
@@ -248,7 +248,7 @@
     :emphasize-lines: 4,6,7
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         py::class_<PyAnimal> animal(m, "Animal");
         animal
@@ -295,11 +295,11 @@
 Passing STL data structures
 ===========================
 
-When including the additional header file :file:`pybind/stl.h`, conversions
+When including the additional header file :file:`pybind11/stl.h`, conversions
 between ``std::vector<>`` and ``std::map<>`` and the Python ``list`` and
 ``dict`` data structures are automatically enabled. The types ``std::pair<>``
 and ``std::tuple<>`` are already supported out of the box with just the core
-:file:`pybind/pybind.h` header.
+:file:`pybind11/pybind11.h` header.
 
 .. note::
 
@@ -376,7 +376,7 @@
     };
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         py::class_<Example>(m, "Example")
             .def(py::init<>())
@@ -620,7 +620,7 @@
 
 When it is invoked with a different type (e.g. an integer), the binding code
 will attempt to cast the input into a NumPy array of the requested type.
-Note that this feature requires the ``pybind/numpy.h`` header to be included.
+Note that this feature requires the ``pybind11/numpy.h`` header to be included.
 
 Vectorizing functions
 =====================
@@ -633,7 +633,7 @@
 
     double my_func(int x, float y, double z);
 
-After including the ``pybind/numpy.h`` header, this is extremely simple:
+After including the ``pybind11/numpy.h`` header, this is extremely simple:
 
 .. code-block:: cpp
 
diff --git a/docs/basics.rst b/docs/basics.rst
index a4e7271..b55d402 100644
--- a/docs/basics.rst
+++ b/docs/basics.rst
@@ -37,7 +37,7 @@
 On Windows, use the `CMake GUI`_ to create a Visual Studio project. Note that
 only the 2015 release and newer versions are supported since pybind11 relies on
 various C++11 language features that break older versions of Visual Studio.
-After running CMake, open the created :file:`pybind.sln` file and perform a
+After running CMake, open the created :file:`pybind11.sln` file and perform a
 release build, which will will produce a file named
 :file:`Release\\example.pyd`. Copy this file to the :file:`example` directory
 and run :file:`example\\run_test.py` using the targeted Python version.
@@ -79,16 +79,16 @@
 
 .. code-block:: cpp
 
-    #include <pybind/pybind.h>
+    #include <pybind11/pybind11.h>
 
     int add(int i, int j) {
         return i + j;
     }
 
-    namespace py = pybind;
+    namespace py = pybind11
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         m.def("add", &add, "A function which adds two numbers");
 
@@ -117,7 +117,7 @@
 
 .. code-block:: bash
 
-    $ c++ -O3 -shared -std=c++11 -I <path-to-pybind>/include `python-config --cflags --libs` example.cpp -o example.so
+    $ c++ -O3 -shared -std=c++11 -I <path-to-pybind11>/include `python-config --cflags --libs` example.cpp -o example.so
 
 In general, it is advisable to include several additional build parameters
 that can considerably reduce the size of the created binary. Refer to section
@@ -222,41 +222,41 @@
 an additional extension header to be included). To pass other data structures
 as arguments and return values, refer to the section on binding :ref:`classes`.
 
-+------------------------+--------------------------+---------------------+
-|  Data type             |  Description             | Header file         |
-+========================+==========================+=====================+
-| int8_t, uint8_t        | 8-bit integers           | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| int16_t, uint16_t      | 16-bit integers          | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| int32_t, uint32_t      | 32-bit integers          | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| int64_t, uint64_t      | 64-bit integers          | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| ssize_t, size_t        | Platform-dependent size  | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| float, double          | Floating point types     | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| bool                   | Two-state Boolean type   | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| char                   | Character literal        | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| const char *           | UTF-8 string literal     | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| std::string            | STL dynamic UTF-8 string | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| std::pair<T1, T2>      | Pair of two custom types | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| std::tuple<....>       | Arbitrary tuple of types | pybind/pybind.h     |
-+------------------------+--------------------------+---------------------+
-| std::complex<T>        | Complex numbers          | pybind/complex.h    |
-+------------------------+--------------------------+---------------------+
-| std::vector<T>         | STL dynamic array        | pybind/stl.h        |
-+------------------------+--------------------------+---------------------+
-| std::map<T1, T2>       | STL dynamic maps         | pybind/stl.h        |
-+------------------------+--------------------------+---------------------+
-| std::function<...>     | STL polymorphic function | pybind/functional.h |
-+------------------------+--------------------------+---------------------+
++------------------------+--------------------------+-----------------------+
+|  Data type             |  Description             | Header file           |
++========================+==========================+=======================+
+| int8_t, uint8_t        | 8-bit integers           | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| int16_t, uint16_t      | 16-bit integers          | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| int32_t, uint32_t      | 32-bit integers          | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| int64_t, uint64_t      | 64-bit integers          | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| ssize_t, size_t        | Platform-dependent size  | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| float, double          | Floating point types     | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| bool                   | Two-state Boolean type   | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| char                   | Character literal        | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| const char *           | UTF-8 string literal     | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| std::string            | STL dynamic UTF-8 string | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| std::pair<T1, T2>      | Pair of two custom types | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| std::tuple<....>       | Arbitrary tuple of types | pybind11/pybind11.h   |
++------------------------+--------------------------+-----------------------+
+| std::complex<T>        | Complex numbers          | pybind11/complex.h    |
++------------------------+--------------------------+-----------------------+
+| std::vector<T>         | STL dynamic array        | pybind11/stl.h        |
++------------------------+--------------------------+-----------------------+
+| std::map<T1, T2>       | STL dynamic maps         | pybind11/stl.h        |
++------------------------+--------------------------+-----------------------+
+| std::function<...>     | STL polymorphic function | pybind11/functional.h |
++------------------------+--------------------------+-----------------------+
 
 
 .. [#f1] In practice, implementation and binding code will generally be located
diff --git a/docs/classes.rst b/docs/classes.rst
index 9f3b56c..5ef042c 100644
--- a/docs/classes.rst
+++ b/docs/classes.rst
@@ -23,12 +23,12 @@
 
 .. code-block:: cpp
 
-    #include <pybind/pybind.h>
+    #include <pybind11/pybind11.h>
 
-    namespace py = pybind;
+    namespace py = pybind11
 
     PYBIND_PLUGIN(example) {
-        py::module m("example", "pybind example plugin");
+        py::module m("example", "pybind11 example plugin");
 
         py::class_<Pet>(m, "Pet")
             .def(py::init<const std::string &>())
diff --git a/docs/reference.rst b/docs/reference.rst
index 5fade60..3a70822 100644
--- a/docs/reference.rst
+++ b/docs/reference.rst
@@ -4,7 +4,7 @@
 
     Please be advised that the reference documentation discussing pybind11
     internals is currently incomplete. Please refer to the previous sections
-    and the pybind header files for the nitty gritty details.
+    and the pybind11 header files for the nitty gritty details.
 
 Reference
 #########
@@ -22,7 +22,7 @@
     .. code-block:: cpp
 
         PYBIND_PLUGIN(example) {
-            pybind::module m("example", "pybind example plugin");
+            pybind11::module m("example", "pybind11 example plugin");
             /// Set up bindings here
             return m.ptr();
         }
@@ -188,9 +188,9 @@
 
     .. code-block:: cpp
 
-        pybind::module m("example", "pybind example plugin");
-        pybind::module m2 = m.def_submodule("sub", "A submodule of 'example'");
-        pybind::module m3 = m2.def_submodule("subsub", "A submodule of 'example.sub'");
+        pybind11::module m("example", "pybind11 example plugin");
+        pybind11::module m2 = m.def_submodule("sub", "A submodule of 'example'");
+        pybind11::module m3 = m2.def_submodule("subsub", "A submodule of 'example.sub'");
 
 .. cpp:function:: template <typename Func, typename ... Extra> module& module::def(const char *name, Func && f, Extra && ... extra)
 
diff --git a/example/example.h b/example/example.h
index 67434bb..ab8fff7 100644
--- a/example/example.h
+++ b/example/example.h
@@ -1,7 +1,7 @@
-#include <pybind/pybind.h>
+#include <pybind11/pybind11.h>
 #include <iostream>
 
 using std::cout;
 using std::endl;
 
-namespace py = pybind;
+namespace py = pybind11;
diff --git a/example/example10.cpp b/example/example10.cpp
index 80f7890..1a377e5 100644
--- a/example/example10.cpp
+++ b/example/example10.cpp
@@ -9,7 +9,7 @@
 */
 
 #include "example.h"
-#include <pybind/numpy.h>
+#include <pybind11/numpy.h>
 
 double my_func(int x, float y, double z) {
     std::cout << "my_func(x:int=" << x << ", y:float=" << y << ", z:float=" << z << ")" << std::endl;
diff --git a/example/example12.cpp b/example/example12.cpp
index 274edf8..d0e8699 100644
--- a/example/example12.cpp
+++ b/example/example12.cpp
@@ -8,7 +8,7 @@
 */
 
 #include "example.h"
-#include <pybind/functional.h>
+#include <pybind11/functional.h>
 
 /* This is an example class that we'll want to be able to extend from Python */
 class Example12  {
diff --git a/example/example2.cpp b/example/example2.cpp
index 580fbc3..f7972e0 100644
--- a/example/example2.cpp
+++ b/example/example2.cpp
@@ -9,7 +9,7 @@
 */
 
 #include "example.h"
-#include <pybind/stl.h>
+#include <pybind11/stl.h>
 
 class Example2 {
 public:
diff --git a/example/example3.cpp b/example/example3.cpp
index 80bdf0e..3b3a625 100644
--- a/example/example3.cpp
+++ b/example/example3.cpp
@@ -8,7 +8,7 @@
 */
 
 #include "example.h"
-#include <pybind/operators.h>
+#include <pybind11/operators.h>
 
 class Vector2 {
 public:
diff --git a/example/example5.cpp b/example/example5.cpp
index 34c7abe..cabd847 100644
--- a/example/example5.cpp
+++ b/example/example5.cpp
@@ -9,7 +9,7 @@
 */
 
 #include "example.h"
-#include <pybind/functional.h>
+#include <pybind11/functional.h>
 
 
 class Pet {
diff --git a/example/example6.cpp b/example/example6.cpp
index 880f865..416c1d0 100644
--- a/example/example6.cpp
+++ b/example/example6.cpp
@@ -9,8 +9,8 @@
 */
 
 #include "example.h"
-#include <pybind/operators.h>
-#include <pybind/stl.h>
+#include <pybind11/operators.h>
+#include <pybind11/stl.h>
 
 class Sequence {
 public:
diff --git a/example/example8.cpp b/example/example8.cpp
index 475f72a..d8a43e3 100644
--- a/example/example8.cpp
+++ b/example/example8.cpp
@@ -32,10 +32,7 @@
 };
 
 /// Make pybind aware of the ref-counted wrapper type
-namespace pybind { namespace detail {
-template <typename T> class type_caster<ref<T>>
-    : public type_caster_holder<T, ref<T>> { };
-}}
+PYBIND_DECLARE_HOLDER_TYPE(T, ref<T>);
 
 Object *make_object_1() { return new MyObject(1); }
 ref<Object> make_object_2() { return new MyObject(2); }
diff --git a/include/pybind/cast.h b/include/pybind11/cast.h
similarity index 97%
rename from include/pybind/cast.h
rename to include/pybind11/cast.h
index d949da8..84af446 100644
--- a/include/pybind/cast.h
+++ b/include/pybind11/cast.h
@@ -1,5 +1,5 @@
 /*
-    pybind/cast.h: Partial template specializations to cast between
+    pybind11/cast.h: Partial template specializations to cast between
     C++ and Python types
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
@@ -10,12 +10,12 @@
 
 #pragma once
 
-#include <pybind/pytypes.h>
-#include <pybind/typeid.h>
+#include "pytypes.h"
+#include "typeid.h"
 #include <array>
 #include <limits>
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 NAMESPACE_BEGIN(detail)
 
 #if defined(_MSC_VER)
@@ -527,6 +527,12 @@
     holder_type holder;
 };
 
+#define PYBIND_DECLARE_HOLDER_TYPE(type, holder_type) \
+    namespace pybind11 { namespace detail { \
+    template <typename type> class type_caster<holder_type> \
+        : public type_caster_holder<type, holder_type> { }; \
+    }}
+
 template <> class type_caster<handle> {
 public:
     bool load(PyObject *src) {
@@ -571,7 +577,7 @@
     return object(detail::type_caster<typename detail::decay<T>::type>::cast(value, policy, parent), false);
 }
 
-template <typename T> inline T handle::cast() { return pybind::cast<T>(m_ptr); }
+template <typename T> inline T handle::cast() { return pybind11::cast<T>(m_ptr); }
 template <> inline void handle::cast() { return; }
 
 template <typename... Args> inline object handle::call(Args&&... args_) {
@@ -601,4 +607,4 @@
     return object(result, false);
 }
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
diff --git a/include/pybind/common.h b/include/pybind11/common.h
similarity index 97%
rename from include/pybind/common.h
rename to include/pybind11/common.h
index 427bce7..95807f7 100644
--- a/include/pybind/common.h
+++ b/include/pybind11/common.h
@@ -1,5 +1,5 @@
 /*
-    pybind/common.h -- Basic macros
+    pybind11/common.h -- Basic macros
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -68,7 +68,7 @@
     extern "C" PYBIND_EXPORT PyObject *init##name()
 #endif
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 
 typedef Py_ssize_t ssize_t;
 
@@ -192,7 +192,7 @@
 struct stop_iteration    : public std::runtime_error { public: stop_iteration(const std::string &w="") : std::runtime_error(w)   {} };
 struct index_error       : public std::runtime_error { public: index_error(const std::string &w="")    : std::runtime_error(w)   {} };
 struct error_already_set : public std::runtime_error { public: error_already_set() : std::runtime_error(detail::error_string())  {} };
-/// Thrown when pybind::cast or handle::call fail due to a type casting error
+/// Thrown when pybind11::cast or handle::call fail due to a type casting error
 struct cast_error        : public std::runtime_error { public: cast_error(const std::string &w = "") : std::runtime_error(w)     {} };
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
diff --git a/include/pybind/complex.h b/include/pybind11/complex.h
similarity index 89%
rename from include/pybind/complex.h
rename to include/pybind11/complex.h
index 9d690b1..512b788 100644
--- a/include/pybind/complex.h
+++ b/include/pybind11/complex.h
@@ -1,5 +1,5 @@
 /*
-    pybind/complex.h: Complex number support
+    pybind11/complex.h: Complex number support
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,10 +9,10 @@
 
 #pragma once
 
-#include <pybind/pybind.h>
+#include "pybind11.h"
 #include <complex>
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 
 PYBIND_DECL_FMT(std::complex<float>, "Zf");
 PYBIND_DECL_FMT(std::complex<double>, "Zd");
@@ -37,4 +37,4 @@
     PYBIND_TYPE_CASTER(std::complex<T>, "complex");
 };
 NAMESPACE_END(detail)
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
diff --git a/include/pybind/functional.h b/include/pybind11/functional.h
similarity index 86%
rename from include/pybind/functional.h
rename to include/pybind11/functional.h
index 7c3c9a0..c2cd1e6 100644
--- a/include/pybind/functional.h
+++ b/include/pybind11/functional.h
@@ -1,5 +1,5 @@
 /*
-    pybind/functional.h: std::function<> support
+    pybind11/functional.h: std::function<> support
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,10 +9,10 @@
 
 #pragma once
 
-#include <pybind/pybind.h>
+#include "pybind11.h"
 #include <functional>
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 NAMESPACE_BEGIN(detail)
 
 template <typename Return, typename... Args> struct type_caster<std::function<Return(Args...)>> {
@@ -24,7 +24,7 @@
             return false;
         object src(src_, true);
         value = [src](Args... args) -> Return {
-            object retval(pybind::handle(src).call(std::move(args)...));
+            object retval(pybind11::handle(src).call(std::move(args)...));
             /* Visual studio 2015 parser issue: need parentheses around this expression */
             return (retval.template cast<Return>());
         };
@@ -46,4 +46,4 @@
 };
 
 NAMESPACE_END(detail)
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
diff --git a/include/pybind/numpy.h b/include/pybind11/numpy.h
similarity index 96%
rename from include/pybind/numpy.h
rename to include/pybind11/numpy.h
index 93a3c6b..8a11786 100644
--- a/include/pybind/numpy.h
+++ b/include/pybind11/numpy.h
@@ -1,5 +1,5 @@
 /*
-    pybind/numpy.h: Basic NumPy support, auto-vectorization support
+    pybind11/numpy.h: Basic NumPy support, auto-vectorization support
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,15 +9,15 @@
 
 #pragma once
 
-#include <pybind/pybind.h>
-#include <pybind/complex.h>
+#include "pybind11.h"
+#include "complex.h"
 
 #if defined(_MSC_VER)
 #pragma warning(push)
 #pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
 #endif
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 
 template <typename type> struct npy_format_descriptor { };
 
@@ -196,7 +196,7 @@
         /* Check if the parameters are actually compatible */
         for (size_t i=0; i<N; ++i) {
             if (buffers[i].count != 1 && (buffers[i].ndim != ndim || buffers[i].shape != shape))
-                throw std::runtime_error("pybind::vectorize: incompatible size/dimension of inputs!");
+                throw std::runtime_error("pybind11::vectorize: incompatible size/dimension of inputs!");
         }
 
         /* Call the function */
@@ -234,7 +234,7 @@
                    &std::remove_reference<func>::type::operator())>::type *) nullptr);
 }
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
 
 #if defined(_MSC_VER)
 #pragma warning(pop)
diff --git a/include/pybind/operators.h b/include/pybind11/operators.h
similarity index 95%
rename from include/pybind/operators.h
rename to include/pybind11/operators.h
index 1e08fda..de90b34 100644
--- a/include/pybind/operators.h
+++ b/include/pybind11/operators.h
@@ -1,5 +1,5 @@
 /*
-    pybind/operator.h: Metatemplates for operator overloading
+    pybind11/operator.h: Metatemplates for operator overloading
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,10 +9,10 @@
 
 #pragma once
 
-#include <pybind/pybind.h>
+#include "pybind11.h"
 #include <type_traits>
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 NAMESPACE_BEGIN(detail)
 
 /// Enumeration with all supported operator types
@@ -45,13 +45,13 @@
 
 /// Operator implementation generator
 template <op_id id, op_type ot, typename L, typename R> struct op_ {
-    template <typename Base, typename Holder, typename... Extra> void execute(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
+    template <typename Base, typename Holder, typename... Extra> void execute(pybind11::class_<Base, Holder> &class_, Extra&&... extra) const {
         typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
         typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
         typedef op_impl<id, ot, Base, L_type, R_type> op;
         class_.def(op::name(), &op::execute, std::forward<Extra>(extra)...);
     }
-    template <typename Base, typename Holder, typename... Extra> void execute_cast(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
+    template <typename Base, typename Holder, typename... Extra> void execute_cast(pybind11::class_<Base, Holder> &class_, Extra&&... extra) const {
         typedef typename std::conditional<std::is_same<L, self_t>::value, Base, L>::type L_type;
         typedef typename std::conditional<std::is_same<R, self_t>::value, Base, R>::type R_type;
         typedef op_impl<id, ot, Base, L_type, R_type> op;
@@ -146,4 +146,4 @@
 
 using detail::self;
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
diff --git a/include/pybind/pybind.h b/include/pybind11/pybind11.h
similarity index 93%
rename from include/pybind/pybind.h
rename to include/pybind11/pybind11.h
index 86fc609..6c7fef0 100644
--- a/include/pybind/pybind.h
+++ b/include/pybind11/pybind11.h
@@ -1,5 +1,5 @@
 /*
-    pybind/pybind.h: Main header file of the C++11 python binding generator library
+    pybind11/pybind11.h: Main header file of the C++11 python binding generator library
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -23,9 +23,9 @@
 #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #endif
 
-#include <pybind/cast.h>
+#include "cast.h"
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 
 template <typename T> struct arg_t;
 
@@ -113,31 +113,31 @@
     }
 
     static void process_extra(const char *doc, function_entry *entry, const char **, const char **) { entry->doc = doc; }
-    static void process_extra(const pybind::doc &d, function_entry *entry, const char **, const char **) { entry->doc = d.value; }
-    static void process_extra(const pybind::name &n, function_entry *entry, const char **, const char **) { entry->name = n.value; }
-    static void process_extra(const pybind::arg &a, function_entry *entry, const char **kw, const char **) {
+    static void process_extra(const pybind11::doc &d, function_entry *entry, const char **, const char **) { entry->doc = d.value; }
+    static void process_extra(const pybind11::name &n, function_entry *entry, const char **, const char **) { entry->name = n.value; }
+    static void process_extra(const pybind11::arg &a, function_entry *entry, const char **kw, const char **) {
         if (entry->is_method && entry->keywords == 0)
             kw[entry->keywords++] = "self";
         kw[entry->keywords++] = a.name;
     }
 
     template <typename T>
-    static void process_extra(const pybind::arg_t<T> &a, function_entry *entry, const char **kw, const char **def) {
+    static void process_extra(const pybind11::arg_t<T> &a, function_entry *entry, const char **kw, const char **def) {
         if (entry->is_method && entry->keywords == 0)
             kw[entry->keywords++] = "self";
         kw[entry->keywords] = a.name;
         def[entry->keywords++] = strdup(detail::to_string(a.value).c_str());
     }
 
-    static void process_extra(const pybind::is_method &m, function_entry *entry, const char **, const char **) {
+    static void process_extra(const pybind11::is_method &m, function_entry *entry, const char **, const char **) {
         entry->is_method = true;
         entry->class_ = m.class_;
     }
-    static void process_extra(const pybind::return_value_policy p, function_entry *entry, const char **, const char **) { entry->policy = p; }
-    static void process_extra(pybind::sibling s, function_entry *entry, const char **, const char **) { entry->sibling = s.value; }
+    static void process_extra(const pybind11::return_value_policy p, function_entry *entry, const char **, const char **) { entry->policy = p; }
+    static void process_extra(pybind11::sibling s, function_entry *entry, const char **, const char **) { entry->sibling = s.value; }
 
     template <typename T> static void process_extra(T, int &, PyObject *, PyObject *) { }
-    static void process_extra(const pybind::arg &a, int &index, PyObject *args, PyObject *kwargs) {
+    static void process_extra(const pybind11::arg &a, int &index, PyObject *args, PyObject *kwargs) {
         if (kwargs) {
             if (PyTuple_GET_ITEM(args, index) != nullptr) {
                 index++;
@@ -152,7 +152,7 @@
         index++;
     }
     template <typename T>
-    static void process_extra(const pybind::arg_t<T> &a, int &index, PyObject *args, PyObject *kwargs) {
+    static void process_extra(const pybind11::arg_t<T> &a, int &index, PyObject *args, PyObject *kwargs) {
         if (PyTuple_GET_ITEM(args, index) != nullptr) {
             index++;
             return;
@@ -327,7 +327,7 @@
                 PyObject *inst = PyTuple_GetItem(args, 0);
                 const detail::type_info *type_info =
                     capsule(PyObject_GetAttrString((PyObject *) Py_TYPE(inst),
-                                const_cast<char *>("__pybind__")), false);
+                                const_cast<char *>("__pybind11__")), false);
                 type_info->init_holder(inst);
             }
             return result;
@@ -360,7 +360,7 @@
             throw std::runtime_error(
                 "cpp_function(): function \"" + std::string(m_entry->name) + "\" takes " +
                 std::to_string(args) + " arguments, but " + std::to_string(m_entry->keywords) +
-                " pybind::arg entries were specified!");
+                " pybind11::arg entries were specified!");
 
         m_entry->is_constructor = !strcmp(m_entry->name, "__init__");
         m_entry->signature = descr.str();
@@ -462,7 +462,7 @@
             + std::string(".") + std::string(name);
         module result(PyImport_AddModule(full_name.c_str()), true);
         if (doc)
-            result.attr("__doc__") = pybind::str(doc);
+            result.attr("__doc__") = pybind11::str(doc);
         attr(name) = result;
         return result;
     }
@@ -493,7 +493,7 @@
         Py_INCREF(name);
         std::string full_name(name_);
 
-        pybind::str scope_name = (object) scope.attr("__name__"),
+        pybind11::str scope_name = (object) scope.attr("__name__"),
                     module_name = (object) scope.attr("__module__");
 
         if (scope_name.check())
@@ -538,7 +538,7 @@
         type_info.type = (PyTypeObject *) m_ptr;
         type_info.type_size = type_size;
         type_info.init_holder = init_holder;
-        attr("__pybind__") = capsule(&type_info);
+        attr("__pybind11__") = capsule(&type_info);
 
         scope.attr(name) = *this;
     }
@@ -584,7 +584,7 @@
 
     static PyObject *new_instance(PyTypeObject *type, PyObject *, PyObject *) {
         const detail::type_info *type_info = capsule(
-            PyObject_GetAttrString((PyObject *) type, const_cast<char*>("__pybind__")), false);
+            PyObject_GetAttrString((PyObject *) type, const_cast<char*>("__pybind11__")), false);
         instance<void> *self = (instance<void> *) PyType_GenericAlloc(type, 0);
         self->value = ::operator new(type_info->type_size);
         self->owned = true;
@@ -619,13 +619,13 @@
 #endif
         type->as_buffer.bf_getbuffer = getbuffer;
         type->as_buffer.bf_releasebuffer = releasebuffer;
-        auto info = ((detail::type_info *) capsule(attr("__pybind__")));
+        auto info = ((detail::type_info *) capsule(attr("__pybind11__")));
         info->get_buffer = get_buffer;
         info->get_buffer_data = get_buffer_data;
     }
 
     static int getbuffer(PyObject *obj, Py_buffer *view, int flags) {
-        auto const &typeinfo = ((detail::type_info *) capsule(handle(obj).attr("__pybind__")));
+        auto const &typeinfo = ((detail::type_info *) capsule(handle(obj).attr("__pybind11__")));
 
         if (view == nullptr || obj == nullptr || !typeinfo || !typeinfo->get_buffer) {
             PyErr_SetString(PyExc_BufferError, "Internal error");
@@ -776,7 +776,7 @@
     }
 
     class_ &def_property(const char *name, const cpp_function &fget, const cpp_function &fset, const char *doc = nullptr) {
-        object doc_obj = doc ? pybind::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
+        object doc_obj = doc ? pybind11::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
         object property(
             PyObject_CallFunction((PyObject *)&PyProperty_Type,
                                   const_cast<char *>("OOOO"), fget.ptr() ? fget.ptr() : Py_None,
@@ -786,7 +786,7 @@
     }
 
     class_ &def_property_static(const char *name, const cpp_function &fget, const cpp_function &fset, const char *doc = nullptr) {
-        object doc_obj = doc ? pybind::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
+        object doc_obj = doc ? pybind11::str(doc) : (object) const_cast<cpp_function&>(fget).attr("__doc__");
         object property(
             PyObject_CallFunction((PyObject *)&PyProperty_Type,
                                   const_cast<char *>("OOOs"), fget.ptr() ? fget.ptr() : Py_None,
@@ -796,7 +796,7 @@
     }
 
     template <typename target> class_ alias() {
-        auto &instances = pybind::detail::get_internals().registered_types;
+        auto &instances = pybind11::detail::get_internals().registered_types;
         instances[&typeid(target)] = instances[&typeid(type)];
         return *this;
     }
@@ -846,7 +846,7 @@
 
     /// Add an enumeration entry
     enum_& value(char const* name, Type value) {
-        this->attr(name) = pybind::cast(value, return_value_policy::copy);
+        this->attr(name) = pybind11::cast(value, return_value_policy::copy);
         (*m_entries)[(int) value] = name;
         return *this;
     }
@@ -857,7 +857,7 @@
 
 NAMESPACE_BEGIN(detail)
 template <typename... Args> struct init {
-    template <typename Base, typename Holder, typename... Extra> void execute(pybind::class_<Base, Holder> &class_, Extra&&... extra) const {
+    template <typename Base, typename Holder, typename... Extra> void execute(pybind11::class_<Base, Holder> &class_, Extra&&... extra) const {
         /// Function which calls a specific C++ in-place constructor
         class_.def("__init__", [](Base *instance, Args... args) { new (instance) Base(args...); }, std::forward<Extra>(extra)...);
     }
@@ -919,15 +919,15 @@
         return function();
     }
     PyFrameObject *frame = PyThreadState_Get()->frame;
-    pybind::str caller = pybind::handle(frame->f_code->co_name).str();
+    pybind11::str caller = pybind11::handle(frame->f_code->co_name).str();
     if (strcmp((const char *) caller, name) == 0)
         return function();
     return overload;
 }
 
 #define PYBIND_OVERLOAD_INT(ret_type, class_name, name, ...) { \
-        pybind::gil_scoped_acquire gil; \
-        pybind::function overload = pybind::get_overload(this, #name); \
+        pybind11::gil_scoped_acquire gil; \
+        pybind11::function overload = pybind11::get_overload(this, #name); \
         if (overload) \
             return overload.call(__VA_ARGS__).cast<ret_type>();  }
 
@@ -939,7 +939,7 @@
     PYBIND_OVERLOAD_INT(ret_type, class_name, name, __VA_ARGS__) \
     throw std::runtime_error("Tried to call pure virtual function \"" #name "\"");
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
 
 #if defined(_MSC_VER)
 #pragma warning(pop)
diff --git a/include/pybind/pytypes.h b/include/pybind11/pytypes.h
similarity index 97%
rename from include/pybind/pytypes.h
rename to include/pybind11/pytypes.h
index 4f70bbd..76956d4 100644
--- a/include/pybind/pytypes.h
+++ b/include/pybind11/pytypes.h
@@ -1,5 +1,5 @@
 /*
-    pybind/typeid.h: Convenience wrapper classes for basic Python types
+    pybind11/typeid.h: Convenience wrapper classes for basic Python types
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,10 +9,10 @@
 
 #pragma once
 
-#include <pybind/common.h>
+#include "common.h"
 #include <utility>
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 
 /* A few forward declarations */
 class object;
@@ -37,7 +37,7 @@
     inline detail::accessor operator[](const char *key);
     inline detail::accessor attr(handle key);
     inline detail::accessor attr(const char *key);
-    inline pybind::str str() const;
+    inline pybind11::str str() const;
     template <typename T> T cast();
     template <typename ... Args> object call(Args&&... args_);
     operator bool() const { return m_ptr != nullptr; }
@@ -230,13 +230,13 @@
 #endif
 };
 
-inline pybind::str handle::str() const {
+inline pybind11::str handle::str() const {
     PyObject *str = PyObject_Str(m_ptr);
 #if PY_MAJOR_VERSION < 3
     PyObject *unicode = PyUnicode_FromEncodedObject(str, "utf-8", nullptr);
     Py_XDECREF(str); str = unicode;
 #endif
-    return pybind::str(str, false);
+    return pybind11::str(str, false);
 }
 
 class bool_ : public object {
@@ -370,12 +370,12 @@
     if (internals_ptr)
         return *internals_ptr;
     handle builtins(PyEval_GetBuiltins());
-    capsule caps(builtins["__pybind__"]);
+    capsule caps(builtins["__pybind11__"]);
     if (caps.check()) {
         internals_ptr = caps;
     } else {
         internals_ptr = new internals();
-        builtins["__pybind__"] = capsule(internals_ptr);
+        builtins["__pybind11__"] = capsule(internals_ptr);
     }
     return *internals_ptr;
 }
@@ -413,4 +413,4 @@
 }
 
 NAMESPACE_END(detail)
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
diff --git a/include/pybind/stl.h b/include/pybind11/stl.h
similarity index 96%
rename from include/pybind/stl.h
rename to include/pybind11/stl.h
index bf1d898..e4e819a 100644
--- a/include/pybind/stl.h
+++ b/include/pybind11/stl.h
@@ -1,5 +1,5 @@
 /*
-    pybind/complex.h: Complex number support
+    pybind11/complex.h: Complex number support
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,7 +9,7 @@
 
 #pragma once
 
-#include <pybind/pybind.h>
+#include "pybind11.h"
 #include <map>
 #include <iostream>
 
@@ -19,7 +19,7 @@
 #pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
 #endif
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 NAMESPACE_BEGIN(detail)
 
 template <typename Value> struct type_caster<std::vector<Value>> {
@@ -104,7 +104,7 @@
 
 inline std::ostream &operator<<(std::ostream &os, const object &obj) { os << (const char *) obj.str(); return os; }
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
 
 #if defined(_MSC_VER)
 #pragma warning(pop)
diff --git a/include/pybind/typeid.h b/include/pybind11/typeid.h
similarity index 86%
rename from include/pybind/typeid.h
rename to include/pybind11/typeid.h
index 73ee8ec..551895f 100644
--- a/include/pybind/typeid.h
+++ b/include/pybind11/typeid.h
@@ -1,5 +1,5 @@
 /*
-    pybind/typeid.h: Compiler-independent access to type identifiers
+    pybind11/typeid.h: Compiler-independent access to type identifiers
 
     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
 
@@ -9,14 +9,13 @@
 
 #pragma once
 
-#include <pybind/typeid.h>
 #include <cstdio>
 #include <cstdlib>
 #if defined(__GNUG__)
 #include <cxxabi.h>
 #endif
 
-NAMESPACE_BEGIN(pybind)
+NAMESPACE_BEGIN(pybind11)
 NAMESPACE_BEGIN(detail)
 /// Erase all occurrences of a substring
 inline void erase_all(std::string &string, const std::string &search) {
@@ -39,7 +38,7 @@
         detail::erase_all(name, "struct ");
         detail::erase_all(name, "enum ");
     #endif
-    detail::erase_all(name, "pybind::");
+    detail::erase_all(name, "pybind11::");
 }
 NAMESPACE_END(detail)
 
@@ -50,4 +49,4 @@
     return name;
 }
 
-NAMESPACE_END(pybind)
+NAMESPACE_END(pybind11)
