diff -ur python-igraph-0.6.5.orig/igraph/__init__.py python-igraph-0.6.5.new/igraph/__init__.py
--- python-igraph-0.6.5.orig/igraph/__init__.py	2012-12-06 04:52:15.000000000 -0500
+++ python-igraph-0.6.5.new/igraph/__init__.py	2013-04-28 15:14:45.365691800 -0400
@@ -31,8 +31,8 @@
 
 # pylint: disable-msg=W0401
 # W0401: wildcard import
-from igraph._igraph import *
-from igraph._igraph import __version__, __build_date__
+from igraph.igraphcore import *
+from igraph.igraphcore import __version__, __build_date__
 from igraph.clustering import *
 from igraph.cut import *
 from igraph.configuration import Configuration
@@ -739,7 +739,7 @@
         @return: a list with the Google PageRank values of the specified
           vertices."""
         if arpack_options is None:
-            arpack_options = _igraph.arpack_options
+            arpack_options = igraphcore.arpack_options
         return self.personalized_pagerank(vertices, directed, damping, None, \
                 None, weights, arpack_options)
 
@@ -2655,13 +2655,13 @@
                     self.delete_vertices(other)
                 else:
                     return NotImplemented
-        elif isinstance(other, _igraph.Vertex):
+        elif isinstance(other, igraphcore.Vertex):
             self.delete_vertices(other)
-        elif isinstance(other, _igraph.VertexSeq):
+        elif isinstance(other, igraphcore.VertexSeq):
             self.delete_vertices(other)
-        elif isinstance(other, _igraph.Edge):
+        elif isinstance(other, igraphcore.Edge):
             self.delete_edges(other)
-        elif isinstance(other, _igraph.EdgeSeq):
+        elif isinstance(other, igraphcore.EdgeSeq):
             self.delete_edges(other)
         else:
             return NotImplemented
@@ -2696,13 +2696,13 @@
                     return NotImplemented
             else:
                 return result
-        elif isinstance(other, _igraph.Vertex):
+        elif isinstance(other, igraphcore.Vertex):
             result.delete_vertices(other)
-        elif isinstance(other, _igraph.VertexSeq):
+        elif isinstance(other, igraphcore.VertexSeq):
             result.delete_vertices(other)
-        elif isinstance(other, _igraph.Edge):
+        elif isinstance(other, igraphcore.Edge):
             result.delete_edges(other)
-        elif isinstance(other, _igraph.EdgeSeq):
+        elif isinstance(other, igraphcore.EdgeSeq):
             result.delete_edges(other)
         else:
             return NotImplemented
@@ -2742,13 +2742,13 @@
         """
         if isinstance(other, (int, tuple, list, basestring)):
             return self, other
-        if isinstance(other, _igraph.Vertex):
+        if isinstance(other, igraphcore.Vertex):
             return self, other
-        if isinstance(other, _igraph.VertexSeq):
+        if isinstance(other, igraphcore.VertexSeq):
             return self, other
-        if isinstance(other, _igraph.Edge):
+        if isinstance(other, igraphcore.Edge):
             return self, other
-        if isinstance(other, _igraph.EdgeSeq):
+        if isinstance(other, igraphcore.EdgeSeq):
             return self, other
         return NotImplemented
 
@@ -3041,7 +3041,7 @@
 
 ##############################################################
 
-class VertexSeq(_igraph.VertexSeq):
+class VertexSeq(igraphcore.VertexSeq):
     """Class representing a sequence of vertices in the graph.
     
     This class is most easily accessed by the C{vs} field of the
@@ -3131,7 +3131,7 @@
         if args:
             # Selecting first based on positional arguments, then checking
             # the criteria specified by the keyword arguments
-            vertex = _igraph.VertexSeq.find(self, *args)
+            vertex = igraphcore.VertexSeq.find(self, *args)
             if not kwds:
                 return vertex
             vs = self.graph.vs[vertex.index]
@@ -3247,7 +3247,7 @@
           >>> edges = g.vs.select(bs_gt=10, bs_lt=30)
 
         @return: the new, filtered vertex sequence"""
-        vs = _igraph.VertexSeq.select(self, *args)
+        vs = igraphcore.VertexSeq.select(self, *args)
 
         operators = {
             "lt": operator.lt, \
@@ -3287,7 +3287,7 @@
 
 ##############################################################
 
-class EdgeSeq(_igraph.EdgeSeq):
+class EdgeSeq(igraphcore.EdgeSeq):
     """Class representing a sequence of edges in the graph.
     
     This class is most easily accessed by the C{es} field of the
@@ -3376,7 +3376,7 @@
         if args:
             # Selecting first based on positional arguments, then checking
             # the criteria specified by the keyword arguments
-            edge = _igraph.EdgeSeq.find(self, *args)
+            edge = igraphcore.EdgeSeq.find(self, *args)
             if not kwds:
                 return edge
             es = self.graph.es[edge.index]
@@ -3523,7 +3523,7 @@
           >>> edges = g.es.select(bs_gt=10, bs_lt=30)
 
         @return: the new, filtered edge sequence"""
-        es = _igraph.EdgeSeq.select(self, *args)
+        es = igraphcore.EdgeSeq.select(self, *args)
 
         def _ensure_set(value):
             if isinstance(value, VertexSeq):
diff -ur python-igraph-0.6.5.orig/igraph/clustering.py python-igraph-0.6.5.new/igraph/clustering.py
--- python-igraph-0.6.5.orig/igraph/clustering.py	2012-08-16 11:35:33.000000000 -0400
+++ python-igraph-0.6.5.new/igraph/clustering.py	2013-04-28 15:16:27.720546200 -0400
@@ -1580,9 +1580,9 @@
     @ref: Hubert L and Arabie P: Comparing partitions. Journal of
           Classification 2:193-218, 1985.
     """
-    import igraph._igraph
+    import igraph.igraphcore
     vec1, vec2 = _prepare_community_comparison(comm1, comm2, remove_none)
-    return igraph._igraph._compare_communities(vec1, vec2, method)
+    return igraph.igraphcore._compare_communities(vec1, vec2, method)
 
 
 def split_join_distance(comm1, comm2, remove_none=False):
@@ -1635,8 +1635,8 @@
       not interested in the individual projection distances but only the
       sum of them.
     """
-    import igraph._igraph
+    import igraph.igraphcore
     vec1, vec2 = _prepare_community_comparison(comm1, comm2, remove_none)
-    return igraph._igraph._split_join_distance(vec1, vec2)
+    return igraph.igraphcore._split_join_distance(vec1, vec2)
 
 
diff -ur python-igraph-0.6.5.orig/igraph/drawing/graph.py python-igraph-0.6.5.new/igraph/drawing/graph.py
--- python-igraph-0.6.5.orig/igraph/drawing/graph.py	2013-02-12 08:40:19.000000000 -0500
+++ python-igraph-0.6.5.new/igraph/drawing/graph.py	2013-04-28 16:51:36.996098100 -0400
@@ -18,7 +18,7 @@
 from math import atan2, cos, pi, sin, tan
 from warnings import warn
 
-from igraph._igraph import convex_hull, VertexSeq
+from igraph.igraphcore import convex_hull, VertexSeq
 from igraph.compat import property
 from igraph.configuration import Configuration
 from igraph.drawing.baseclasses import AbstractDrawer, AbstractCairoDrawer, \
diff -ur python-igraph-0.6.5.orig/igraph/matching.py python-igraph-0.6.5.new/igraph/matching.py
--- python-igraph-0.6.5.orig/igraph/matching.py	2012-08-16 11:35:33.000000000 -0400
+++ python-igraph-0.6.5.new/igraph/matching.py	2013-04-28 15:16:47.690688400 -0400
@@ -3,7 +3,7 @@
 """Classes representing matchings on graphs."""
 
 from igraph.clustering import VertexClustering
-from igraph._igraph import Vertex
+from igraph.igraphcore import Vertex
 
 __license__ = u"""\
 Copyright (C) 2006-2012  Tamás Nepusz <ntamas@gmail.com>
diff -ur python-igraph-0.6.5.orig/igraph/statistics.py python-igraph-0.6.5.new/igraph/statistics.py
--- python-igraph-0.6.5.orig/igraph/statistics.py	2012-12-06 04:52:15.000000000 -0500
+++ python-igraph-0.6.5.new/igraph/statistics.py	2013-04-28 15:17:00.801438300 -0400
@@ -566,7 +566,7 @@
       Contemporary Physics 46, 323-351 (2005)
     @ref: A Clauset, CR Shalizi, MEJ Newman: Power-law distributions
       in empirical data. E-print (2007). arXiv:0706.1062"""
-    from igraph._igraph import _power_law_fit
+    from igraph.igraphcore import _power_law_fit
 
     if xmin is None or xmin < 0:
         xmin = -1
diff -ur python-igraph-0.6.5.orig/scripts/mkdoc.sh python-igraph-0.6.5.new/scripts/mkdoc.sh
--- python-igraph-0.6.5.orig/scripts/mkdoc.sh	2013-02-12 08:40:19.000000000 -0500
+++ python-igraph-0.6.5.new/scripts/mkdoc.sh	2013-04-28 15:24:33.792347900 -0400
@@ -33,11 +33,11 @@
   cd $1 || exit 1
 fi
 
-echo "Checking symlinked _igraph.so in ${ROOT_FOLDER}/igraph..."
-if [ ! -e ${ROOT_FOLDER}/igraph/_igraph.so -o ! -L ${ROOT_FOLDER}/igraph/_igraph.so ]; then
-	rm -f ${ROOT_FOLDER}/igraph/_igraph.so
+echo "Checking symlinked igraphcore.so in ${ROOT_FOLDER}/igraph..."
+if [ ! -e ${ROOT_FOLDER}/igraph/igraphcore.so -o ! -L ${ROOT_FOLDER}/igraph/igraphcore.so ]; then
+	rm -f ${ROOT_FOLDER}/igraph/igraphcore.so
 	cd ${ROOT_FOLDER}/igraph
-	ln -s ../build/lib*/igraph/_igraph.so .
+	ln -s ../build/lib*/igraph/igraphcore.so .
 	cd ${ROOT_FOLDER}
 fi
 
Only in python-igraph-0.6.5.new/scripts: mkdoc.sh~
diff -ur python-igraph-0.6.5.orig/setup.py python-igraph-0.6.5.new/setup.py
--- python-igraph-0.6.5.orig/setup.py	2013-02-27 06:04:09.000000000 -0500
+++ python-igraph-0.6.5.new/setup.py	2013-04-28 15:25:17.713860100 -0400
@@ -86,7 +86,7 @@
 print("Include path: %s" % " ".join(include_dirs))
 print("Library path: %s" % " ".join(library_dirs))
 
-igraph_extension = Extension('igraph._igraph', sources, \
+igraph_extension = Extension('igraph.igraphcore', sources, \
   library_dirs=library_dirs, libraries=libraries, \
   include_dirs=include_dirs)
        
diff -ur python-igraph-0.6.5.orig/src/igraphmodule.c python-igraph-0.6.5.new/src/igraphmodule.c
--- python-igraph-0.6.5.orig/src/igraphmodule.c	2013-02-12 08:40:19.000000000 -0500
+++ python-igraph-0.6.5.new/src/igraphmodule.c	2013-04-28 14:54:49.797469900 -0400
@@ -665,7 +665,7 @@
 #ifdef IGRAPH_PYTHON3
 static struct PyModuleDef moduledef = {
   PyModuleDef_HEAD_INIT,
-  "igraph._igraph",                   /* m_name */
+  "igraph.igraphcore",                   /* m_name */
   MODULE_DOCS,                        /* m_doc */
   sizeof(struct module_state),        /* m_size */
   igraphmodule_methods,               /* m_methods */
@@ -771,7 +771,7 @@
 #ifdef IGRAPH_PYTHON3
   m = PyModule_Create(&moduledef);
 #else
-  m = Py_InitModule3("igraph._igraph", igraphmodule_methods, MODULE_DOCS);
+  m = Py_InitModule3("igraph.igraphcore", igraphmodule_methods, MODULE_DOCS);
 #endif
 
   if (m == NULL)
@@ -791,7 +791,7 @@
  
   /* Internal error exception type */
   igraphmodule_InternalError =
-    PyErr_NewException("igraph._igraph.InternalError", PyExc_Exception, NULL);
+    PyErr_NewException("igraph.igraphcore.InternalError", PyExc_Exception, NULL);
   PyModule_AddObject(m, "InternalError", igraphmodule_InternalError);
 
   /* ARPACK default options variable */
@@ -864,7 +864,7 @@
 
   /* Create a CObject containing the API pointer array's address */
 #ifdef IGRAPH_PYTHON3
-  c_api_object = PyCapsule_New((void*)PyIGraph_API, "igraph._igraph._C_API", 0);
+  c_api_object = PyCapsule_New((void*)PyIGraph_API, "igraph.igraphcore._C_API", 0);
 #else
   c_api_object = PyCObject_FromVoidPtr((void*)PyIGraph_API, 0);
 #endif
