diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index 22d44c8..b6d3804 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -26,6 +26,7 @@
   example-stl-binder-vector.cpp
   example-eval.cpp
   example-custom-exceptions.cpp
+  example20.cpp
   issues.cpp
 )
 
@@ -65,4 +66,3 @@
   string(REGEX REPLACE "^(.+).cpp$" "\\1" EXAMPLE_NAME "${VALUE}")
   add_test(NAME ${EXAMPLE_NAME} COMMAND ${RUN_TEST} ${EXAMPLE_NAME})
 endforeach()
-
diff --git a/example/example.cpp b/example/example.cpp
index b831e3e..819f69f 100644
--- a/example/example.cpp
+++ b/example/example.cpp
@@ -29,6 +29,7 @@
 void init_ex_stl_binder_vector(py::module &);
 void init_ex_eval(py::module &);
 void init_ex_custom_exceptions(py::module &);
+void init_ex20(py::module &);
 void init_issues(py::module &);
 
 #if defined(PYBIND11_TEST_EIGEN)
@@ -72,6 +73,7 @@
     init_ex_stl_binder_vector(m);
     init_ex_eval(m);
     init_ex_custom_exceptions(m);
+    init_ex20(m);
     init_issues(m);
 
     #if defined(PYBIND11_TEST_EIGEN)
diff --git a/example/example20.cpp b/example/example20.cpp
new file mode 100644
index 0000000..c22eb21
--- /dev/null
+++ b/example/example20.cpp
@@ -0,0 +1,57 @@
+/*
+  example/example20.cpp -- Usage of structured numpy dtypes
+
+  Copyright (c) 2016 Ivan Smirnov
+
+  All rights reserved. Use of this source code is governed by a
+  BSD-style license that can be found in the LICENSE file.
+*/
+
+#include "example.h"
+
+#include <pybind11/numpy.h>
+#include <cstdint>
+#include <iostream>
+
+namespace py = pybind11;
+
+struct Struct {
+    bool x;
+    uint32_t y;
+    float z;
+};
+
+struct PackedStruct {
+    bool x;
+    uint32_t y;
+    float z;
+} __attribute__((packed));
+
+struct NestedStruct {
+    Struct a;
+    PackedStruct b;
+};
+
+template <typename S>
+py::array_t<S> create_recarray(size_t n) {
+    auto arr = py::array(py::buffer_info(nullptr, sizeof(S),
+                                         py::format_descriptor<S>::value(),
+                                         1, { n }, { sizeof(S) }));
+    auto buf = arr.request();
+    auto ptr = static_cast<S*>(buf.ptr);
+    for (size_t i = 0; i < n; i++) {
+        ptr[i].x = i % 2;
+        ptr[i].y = i;
+        ptr[i].z = i * 1.5;
+    }
+    return arr;
+}
+
+void init_ex20(py::module &m) {
+    PYBIND11_DTYPE(Struct, x, y, z);
+    PYBIND11_DTYPE(PackedStruct, x, y, z);
+    PYBIND11_DTYPE(NestedStruct, a, b);
+
+    m.def("create_rec_simple", &create_recarray<Struct>);
+    m.def("create_rec_packed", &create_recarray<PackedStruct>);
+}
diff --git a/example/example20.py b/example/example20.py
new file mode 100644
index 0000000..ed34548
--- /dev/null
+++ b/example/example20.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+from __future__ import print_function
+
+import numpy as np
+from example import create_rec_simple
+
+
+def check_eq(arr, data, dtype):
+    np.testing.assert_equal(arr, np.array(data, dtype=dtype))
+
+dtype = np.dtype({'names': ['x', 'y', 'z'],
+                  'formats': ['?', 'u4', 'f4'],
+                  'offsets': [0, 4, 8]})
+base_dtype = np.dtype([('x', '?'), ('y', 'u4'), ('z', 'f4')])
+
+arr = create_rec_simple(3)
+assert arr.dtype == dtype
+check_eq(arr, [(False, 0, 0.0), (True, 1, 1.5), (False, 2, 3.0)], dtype)
+check_eq(arr, [(False, 0, 0.0), (True, 1, 1.5), (False, 2, 3.0)], base_dtype)
diff --git a/example/example20.ref b/example/example20.ref
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/example/example20.ref
