diff --git a/Demo/embed/demo.c b/Demo/embed/demo.c
index b9ea6f5..22bfaff 100644
--- a/Demo/embed/demo.c
+++ b/Demo/embed/demo.c
@@ -6,44 +6,44 @@
 
 main(int argc, char **argv)
 {
-	/* Ignore passed-in argc/argv. If desired, conversion
-	   should use mbstowcs to convert them. */
-	wchar_t *args[] = {L"embed", L"hello", 0};
+    /* Ignore passed-in argc/argv. If desired, conversion
+       should use mbstowcs to convert them. */
+    wchar_t *args[] = {L"embed", L"hello", 0};
 
-	/* Pass argv[0] to the Python interpreter */
-	Py_SetProgramName(args[0]);
+    /* Pass argv[0] to the Python interpreter */
+    Py_SetProgramName(args[0]);
 
-	/* Add a static module */
-	PyImport_AppendInittab("xyzzy", PyInit_xyzzy);
+    /* Add a static module */
+    PyImport_AppendInittab("xyzzy", PyInit_xyzzy);
 
-	/* Initialize the Python interpreter.  Required. */
-	Py_Initialize();
+    /* Initialize the Python interpreter.  Required. */
+    Py_Initialize();
 
-	/* Define sys.argv.  It is up to the application if you
-	   want this; you can also let it undefined (since the Python 
-	   code is generally not a main program it has no business
-	   touching sys.argv...) */
-	PySys_SetArgv(2, args);
+    /* Define sys.argv.  It is up to the application if you
+       want this; you can also let it undefined (since the Python
+       code is generally not a main program it has no business
+       touching sys.argv...) */
+    PySys_SetArgv(2, args);
 
-	/* Do some application specific code */
-	printf("Hello, brave new world\n\n");
+    /* Do some application specific code */
+    printf("Hello, brave new world\n\n");
 
-	/* Execute some Python statements (in module __main__) */
-	PyRun_SimpleString("import sys\n");
-	PyRun_SimpleString("print(sys.builtin_module_names)\n");
-	PyRun_SimpleString("print(sys.modules.keys())\n");
-	PyRun_SimpleString("print(sys.executable)\n");
-	PyRun_SimpleString("print(sys.argv)\n");
+    /* Execute some Python statements (in module __main__) */
+    PyRun_SimpleString("import sys\n");
+    PyRun_SimpleString("print(sys.builtin_module_names)\n");
+    PyRun_SimpleString("print(sys.modules.keys())\n");
+    PyRun_SimpleString("print(sys.executable)\n");
+    PyRun_SimpleString("print(sys.argv)\n");
 
-	/* Note that you can call any public function of the Python
-	   interpreter here, e.g. call_object(). */
+    /* Note that you can call any public function of the Python
+       interpreter here, e.g. call_object(). */
 
-	/* Some more application specific code */
-	printf("\nGoodbye, cruel world\n");
+    /* Some more application specific code */
+    printf("\nGoodbye, cruel world\n");
 
-	/* Exit, cleaning up the interpreter */
-	Py_Exit(0);
-	/*NOTREACHED*/
+    /* Exit, cleaning up the interpreter */
+    Py_Exit(0);
+    /*NOTREACHED*/
 }
 
 /* A static module */
@@ -52,29 +52,29 @@
 static PyObject *
 xyzzy_foo(PyObject *self, PyObject* args)
 {
-	return PyLong_FromLong(42L);
+    return PyLong_FromLong(42L);
 }
 
 static PyMethodDef xyzzy_methods[] = {
-	{"foo",		xyzzy_foo,	METH_NOARGS,
-	 "Return the meaning of everything."},
-	{NULL,		NULL}		/* sentinel */
+    {"foo",             xyzzy_foo,      METH_NOARGS,
+     "Return the meaning of everything."},
+    {NULL,              NULL}           /* sentinel */
 };
 
 static struct PyModuleDef xyzzymodule = {
-	{}, /* m_base */
-	"xyzzy",  /* m_name */
-	0,  /* m_doc */
-	0,  /* m_size */
-	xyzzy_methods,  /* m_methods */
-	0,  /* m_reload */
-	0,  /* m_traverse */
-	0,  /* m_clear */
-	0,  /* m_free */
+    {}, /* m_base */
+    "xyzzy",  /* m_name */
+    0,  /* m_doc */
+    0,  /* m_size */
+    xyzzy_methods,  /* m_methods */
+    0,  /* m_reload */
+    0,  /* m_traverse */
+    0,  /* m_clear */
+    0,  /* m_free */
 };
 
 PyObject*
 PyInit_xyzzy(void)
 {
-	return PyModule_Create(&xyzzymodule);
+    return PyModule_Create(&xyzzymodule);
 }
diff --git a/Demo/embed/loop.c b/Demo/embed/loop.c
index d5af829..2f7fe62 100644
--- a/Demo/embed/loop.c
+++ b/Demo/embed/loop.c
@@ -6,28 +6,28 @@
 
 main(int argc, char **argv)
 {
-	int count = -1;
-	char *command;
+    int count = -1;
+    char *command;
 
-	if (argc < 2 || argc > 3) {
-		fprintf(stderr, "usage: loop <python-command> [count]\n");
-		exit(2);
-	}
-	command = argv[1];
+    if (argc < 2 || argc > 3) {
+        fprintf(stderr, "usage: loop <python-command> [count]\n");
+        exit(2);
+    }
+    command = argv[1];
 
-	if (argc == 3) {
-		count = atoi(argv[2]);
-	}
+    if (argc == 3) {
+        count = atoi(argv[2]);
+    }
 
-	Py_SetProgramName(argv[0]);
+    Py_SetProgramName(argv[0]);
 
-	/* uncomment this if you don't want to load site.py */
-	/* Py_NoSiteFlag = 1; */
+    /* uncomment this if you don't want to load site.py */
+    /* Py_NoSiteFlag = 1; */
 
-	while (count == -1 || --count >= 0 ) {
-		Py_Initialize();
-		PyRun_SimpleString(command);
-		Py_Finalize();
-	}
-	return 0;
+    while (count == -1 || --count >= 0 ) {
+        Py_Initialize();
+        PyRun_SimpleString(command);
+        Py_Finalize();
+    }
+    return 0;
 }
