Index: quisk-3.5.11/quisk.h
===================================================================
--- quisk-3.5.11.orig/quisk.h	2012-01-27 22:40:16.000000000 -0500
+++ quisk-3.5.11/quisk.h	2012-01-27 22:43:05.000000000 -0500
@@ -98,7 +98,9 @@
 	int int_filter_interp;
 } ;
 
+#ifndef SOUND_MODULE
 extern struct sound_conf quisk_sound_state;
+#endif
 extern int mic_max_display;		// display value of maximum microphone signal level
 extern int data_width;
 extern int quisk_using_udp;	// is a UDP port used for capture (0 or 1)?
@@ -120,12 +122,14 @@
 extern PyObject * quisk_micplay_channels(PyObject * , PyObject *);
 extern PyObject * quisk_sound_devices(PyObject * , PyObject *);
 
+#ifndef UTILITY_MODULE
 extern int    QuiskGetConfigInt   (const char *, int);
 extern double QuiskGetConfigDouble(const char *, double);
 extern char * QuiskGetConfigString(const char *, char *);
 extern double QuiskTimeSec(void);
 extern void   QuiskSleepMicrosec(int);
 extern void   QuiskPrintTime(const char *, int);
+#endif
 
 // These function pointers are the Start/Stop/Read interface for
 // the SDR-IQ and any other C-language extension modules that return
@@ -133,9 +137,11 @@
 typedef void (* ty_sample_start)(void);
 typedef void (* ty_sample_stop)(void);
 typedef int  (* ty_sample_read)(complex *);
+#ifndef SOUND_MODULE
 extern ty_sample_start pt_sample_start;
 extern ty_sample_stop  pt_sample_stop;
 extern ty_sample_read  pt_sample_read;
+#endif
 
 void quisk_open_sound(void);
 void quisk_close_sound(void);
Index: quisk-3.5.11/sound.c
===================================================================
--- quisk-3.5.11.orig/sound.c	2012-01-27 22:40:16.000000000 -0500
+++ quisk-3.5.11/sound.c	2012-01-27 22:43:05.000000000 -0500
@@ -6,6 +6,7 @@
 #include <math.h>
 #include <sys/time.h>
 #include <time.h>
+#define SOUND_MODULE 1
 #include "quisk.h"
 #include "filter.h"
 
Index: quisk-3.5.11/utility.c
===================================================================
--- quisk-3.5.11.orig/utility.c	2012-01-27 22:40:16.000000000 -0500
+++ quisk-3.5.11/utility.c	2012-01-27 22:43:05.000000000 -0500
@@ -6,6 +6,7 @@
 #include <sys/time.h>
 #endif
 #include <complex.h>
+#define UTILITY_MODULE 1
 #include "quisk.h"
 
 // Access to config file attributes.
Index: quisk-3.5.11/quisk.c
===================================================================
--- quisk-3.5.11.orig/quisk.c	2012-01-27 22:40:15.000000000 -0500
+++ quisk-3.5.11/quisk.c	2012-01-30 22:02:34.000000000 -0500
@@ -1792,8 +1792,52 @@
 PyMODINIT_FUNC init_quisk (void)
 {
 	PyObject *m;
+	PyObject *c_api_object;
+
 	m = Py_InitModule ("_quisk", QuiskMethods);
 	QuiskError = PyErr_NewException ("quisk.error", NULL, NULL);
 	Py_INCREF (QuiskError);
 	PyModule_AddObject (m, "error", QuiskError);
+
+#if PY_VERSION_HEX >= 0x03000000
+	/* Create Capsules for handing C objects to C extensions in other Python modules. */
+	c_api_object = PyCapsule_New((void *)&quisk_sound_state, "quisk._C_sound_state", NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sound_state", c_api_object);
+	c_api_object = PyCapsule_New((void *)&pt_sample_start, "quisk._C_sample_start", NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sample_start", c_api_object);
+	c_api_object = PyCapsule_New((void *)&pt_sample_stop, "quisk._C_sample_stop", NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sample_stop", c_api_object);
+	c_api_object = PyCapsule_New((void *)&pt_sample_read, "quisk._C_sample_read", NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sample_read", c_api_object);
+#else
+	/* Create CObjects for handing C objects to C extensions in other Python modules. */
+	c_api_object = PyCObject_FromVoidPtr((void *)&quisk_sound_state, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sound_state", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&pt_sample_start, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sample_start", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&pt_sample_stop, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sample_stop", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&pt_sample_read, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_sample_read", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&QuiskGetConfigDouble, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_GetConfigDouble", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&QuiskGetConfigString, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_GetConfigString", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&QuiskSleepMicrosec, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_SleepMicrosec", c_api_object);
+	c_api_object = PyCObject_FromVoidPtr((void *)&QuiskTimeSec, NULL);
+	if (c_api_object != NULL)
+	  PyModule_AddObject(m, "_C_TimeSec", c_api_object);
+#endif
 }
