last breaking change: be consistent about the project name
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)