python 3.2 compatiblity (closes #56)
diff --git a/example/example2.py b/example/example2.py
index f42ee49..4220134 100755
--- a/example/example2.py
+++ b/example/example2.py
@@ -30,11 +30,11 @@
 instance.print_dict_2(dict_result)
 
 set_result = instance.get_set()
-set_result.add(u'key3')
+set_result.add('key3')
 instance.print_set(set_result)
 
 set_result = instance.get_set2()
-set_result.add(u'key3')
+set_result.add('key3')
 instance.print_set_2(set_result)
 
 list_result = instance.get_list()
diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index 334ec13..1f3f1cb 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -10,25 +10,57 @@
 #pragma once
 
 #if !defined(NAMESPACE_BEGIN)
-#define NAMESPACE_BEGIN(name) namespace name {
+#  define NAMESPACE_BEGIN(name) namespace name {
 #endif
 #if !defined(NAMESPACE_END)
-#define NAMESPACE_END(name) }
+#  define NAMESPACE_END(name) }
 #endif
 
 #if !defined(PYBIND11_EXPORT)
-#if defined(WIN32) || defined(_WIN32)
-#define PYBIND11_EXPORT __declspec(dllexport)
-#else
-#define PYBIND11_EXPORT __attribute__ ((visibility("default")))
-#endif
-#endif
-#if defined(_MSC_VER)
-#define PYBIND11_NOINLINE __declspec(noinline)
-#else
-#define PYBIND11_NOINLINE __attribute__ ((noinline))
+#  if defined(WIN32) || defined(_WIN32)
+#    define PYBIND11_EXPORT __declspec(dllexport)
+#  else
+#    define PYBIND11_EXPORT __attribute__ ((visibility("default")))
+#  endif
 #endif
 
+#if defined(_MSC_VER)
+#  define PYBIND11_NOINLINE __declspec(noinline)
+#else
+#  define PYBIND11_NOINLINE __attribute__ ((noinline))
+#endif
+
+/// Include Python header, disable linking to pythonX_d.lib on Windows in debug mode
+#if defined(_MSC_VER)
+#  define HAVE_ROUND
+#  pragma warning(push)
+#  pragma warning(disable: 4510 4610 4512 4005)
+#  if _DEBUG
+#    define _DEBUG_MARKER
+#    undef _DEBUG
+#  endif
+#endif
+
+#include <Python.h>
+#include <frameobject.h>
+
+#ifdef isalnum
+#  undef isalnum
+#  undef isalpha
+#  undef islower
+#  undef isspace
+#  undef isupper
+#  undef tolower
+#  undef toupper
+#endif
+
+#if defined(_MSC_VER)
+#  if defined(_DEBUG_MARKER)
+#    define _DEBUG
+#  undef _DEBUG_MARKER
+#endif
+#  pragma warning(pop)
+#endif
 
 #include <vector>
 #include <string>
@@ -37,35 +69,6 @@
 #include <unordered_map>
 #include <memory>
 
-/// Include Python header, disable linking to pythonX_d.lib on Windows in debug mode
-#if defined(_MSC_VER)
-#define HAVE_ROUND
-#pragma warning(push)
-#pragma warning(disable: 4510 4610 4512 4005)
-#if _DEBUG
-#define _DEBUG_MARKER
-#undef _DEBUG
-#endif
-#endif
-#include <Python.h>
-#include <frameobject.h>
-#ifdef isalnum
-#undef isalnum
-#undef isalpha
-#undef islower
-#undef isspace
-#undef isupper
-#undef tolower
-#undef toupper
-#endif
-#if defined(_MSC_VER)
-#if defined(_DEBUG_MARKER)
-#define _DEBUG
-#undef _DEBUG_MARKER
-#endif
-#pragma warning(pop)
-#endif
-
 #if PY_MAJOR_VERSION >= 3 /// Compatibility macros for various Python versions
 #define PYBIND11_BYTES_CHECK PyBytes_Check
 #define PYBIND11_BYTES_FROM_STRING PyBytes_FromString
diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h
index 8f52471..10488c3 100644
--- a/include/pybind11/pytypes.h
+++ b/include/pybind11/pytypes.h
@@ -248,13 +248,13 @@
     }
 
     operator std::string() const {
-#if PY_MAJOR_VERSION >= 3
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 3
         return PyUnicode_AsUTF8(m_ptr);
 #else
         object temp(PyUnicode_AsUTF8String(m_ptr), false);
         if (temp.ptr() == nullptr)
             pybind11_fail("Unable to extract string contents!");
-        return PyString_AsString(temp.ptr());
+        return PYBIND11_BYTES_AS_STRING(temp.ptr());
 #endif
     }
 };