diff --git a/example/issues.cpp b/example/issues.cpp
index 8fc90f4..5c8c369 100644
--- a/example/issues.cpp
+++ b/example/issues.cpp
@@ -10,6 +10,8 @@
 #include "example.h"
 #include <pybind11/stl.h>
 
+PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
+
 void init_issues(py::module &m) {
     py::module m2 = m.def_submodule("issues");
 
@@ -20,7 +22,9 @@
     m2.def("print_char", [](char c) { std::cout << c << std::endl; });
 
     // #159: virtual function dispatch has problems with similar-named functions
-    struct Base { virtual void dispatch(void) const = 0; };
+    struct Base { virtual void dispatch(void) const {
+        /* for some reason MSVC2015 can't compile this if the function is pure virtual */
+    }; };
 
     struct DispatchIssue : Base {
         virtual void dispatch(void) const {
@@ -58,4 +62,33 @@
     m2.def("iterator_passthrough", [](py::iterator s) -> py::iterator {
         return py::make_iterator(std::begin(s), std::end(s));
     });
-}
+
+    // #187: issue involving std::shared_ptr<> return value policy & garbage collection
+    struct ElementBase { virtual void foo() { } /* Force creation of virtual table */ };
+    struct ElementA : ElementBase {
+        ElementA(int v) : v(v) { }
+        int value() { return v; }
+        int v;
+    };
+
+    struct ElementList {
+        void add(std::shared_ptr<ElementBase> e) { l.push_back(e); }
+        std::vector<std::shared_ptr<ElementBase>> l;
+    };
+
+    py::class_<ElementBase, std::shared_ptr<ElementBase>> (m2, "ElementBase");
+
+    py::class_<ElementA, std::shared_ptr<ElementA>>(m2, "ElementA", py::base<ElementBase>())
+        .def(py::init<int>())
+        .def("value", &ElementA::value);
+
+    py::class_<ElementList, std::shared_ptr<ElementList>>(m2, "ElementList")
+        .def(py::init<>())
+        .def("add", &ElementList::add)
+        .def("get", [](ElementList &el){
+            py::list list;
+            for (auto &e : el.l)
+                list.append(py::cast(e));
+            return list;
+        });
+};
diff --git a/example/issues.py b/example/issues.py
index be241e1..2dfd059 100644
--- a/example/issues.py
+++ b/example/issues.py
@@ -5,8 +5,10 @@
 
 from example.issues import print_cchar, print_char
 from example.issues import DispatchIssue, dispatch_issue_go
-from example.issues import Placeholder ,return_vec_of_reference_wrapper
+from example.issues import Placeholder, return_vec_of_reference_wrapper
 from example.issues import iterator_passthrough
+from example.issues import ElementList, ElementA
+import gc
 
 print_cchar("const char *")
 print_char('c')
@@ -32,3 +34,11 @@
 print(return_vec_of_reference_wrapper(Placeholder(4)))
 
 print(list(iterator_passthrough(iter([3, 5, 7, 9, 11, 13, 15]))))
+
+el = ElementList()
+for i in range(10):
+    el.add(ElementA(i))
+gc.collect()
+for i, v in enumerate(el.get()):
+    print("%i==%i, " % (i, v.value()), end='')
+print()
diff --git a/example/issues.ref b/example/issues.ref
index 6d9a893..13bafc2 100644
--- a/example/issues.ref
+++ b/example/issues.ref
@@ -4,3 +4,4 @@
 Yay..
 [Placeholder[1], Placeholder[2], Placeholder[3], Placeholder[4]]
 [3, 5, 7, 9, 11, 13, 15]
+0==0, 1==1, 2==2, 3==3, 4==4, 5==5, 6==6, 7==7, 8==8, 9==9, 
