smart pointer refcount fix by @dean0x7d with slight modifications (fixes #471)
diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h
index 10c0e7a..f89fae8 100644
--- a/include/pybind11/pybind11.h
+++ b/include/pybind11/pybind11.h
@@ -1134,6 +1134,7 @@
         } catch (const std::bad_weak_ptr &) {
             new (&inst->holder) holder_type(inst->value);
         }
+        inst->owned = true;
     }
 
     /// Initialize holder object, variant 2: try to construct from existing holder object, if possible
@@ -1144,6 +1145,7 @@
             new (&inst->holder) holder_type(*holder_ptr);
         else
             new (&inst->holder) holder_type(inst->value);
+        inst->owned = true;
     }
 
     /// Initialize holder object, variant 3: holder is not copy constructible (e.g. unique_ptr), always initialize from raw pointer
diff --git a/tests/test_issues.cpp b/tests/test_issues.cpp
index f5467cb..362ad44 100644
--- a/tests/test_issues.cpp
+++ b/tests/test_issues.cpp
@@ -290,7 +290,28 @@
         for (auto &e : nothrows) l.append(py::cast(e));
         return l;
     });
-}
+
+    /// Issue #471: shared pointer instance not dellocated
+    class SharedChild : public std::enable_shared_from_this<SharedChild> {
+    public:
+        SharedChild() { print_created(this); }
+        ~SharedChild() { print_destroyed(this); }
+    };
+
+    class SharedParent {
+    public:
+        SharedParent() : child(std::make_shared<SharedChild>()) { }
+        const SharedChild &get_child() const { return *child; }
+
+    private:
+        std::shared_ptr<SharedChild> child;
+    };
+
+    py::class_<SharedChild, std::shared_ptr<SharedChild>>(m, "SharedChild");
+    py::class_<SharedParent, std::shared_ptr<SharedParent>>(m, "SharedParent")
+        .def(py::init<>())
+        .def("get_child", &SharedParent::get_child, py::return_value_policy::reference);
+};
 
 
 // MSVC workaround: trying to use a lambda here crashes MSCV
diff --git a/tests/test_issues.py b/tests/test_issues.py
index cf645ef..208cf3b 100644
--- a/tests/test_issues.py
+++ b/tests/test_issues.py
@@ -1,5 +1,6 @@
 import pytest
 import gc
+from pybind11_tests import ConstructorStats
 
 
 def test_regressions():
@@ -187,3 +188,16 @@
     """ Issue 461: overwriting a class with a function """
     from pybind11_tests.issues import dupe_exception_failures
     assert dupe_exception_failures() == []
+
+
+def test_enable_shared_from_this_with_reference_rvp():
+    """ Issue #471: shared pointer instance not dellocated """
+    from pybind11_tests import SharedParent, SharedChild
+
+    parent = SharedParent()
+    child = parent.get_child()
+
+    cstats = ConstructorStats.get(SharedChild)
+    assert cstats.alive() == 1
+    del child, parent
+    assert cstats.alive() == 0