diff --git a/getting_started/00_overview.ipynb b/getting_started/00_overview.ipynb
index af3bb246c5a767ffc74bb993c088ffdbc41fdc7d..726c6baa7fda2867deec3fefa9bb0f375e5674bc 100644
--- a/getting_started/00_overview.ipynb
+++ b/getting_started/00_overview.ipynb
@@ -2,6 +2,7 @@
  "cells": [
   {
    "cell_type": "markdown",
+   "id": "d9a95412",
    "metadata": {},
    "source": [
     "# WIN Pytreat - Python overview\n",
@@ -67,6 +68,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "bfe0abb7",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -76,6 +78,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "6b7b0a1d",
    "metadata": {},
    "source": [
     "And you can explore the available methods on a Python object by using the\n",
@@ -85,6 +88,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "4aaf1645",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -94,6 +98,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "5e17377c",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"python-in-a-nutshell\"></a>\n",
@@ -118,6 +123,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "7a90987e",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -129,6 +135,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "6c5482ab",
    "metadata": {},
    "source": [
     "**Cons**\n",
@@ -248,21 +255,23 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "92f979f2",
    "metadata": {},
    "outputs": [],
    "source": [
     "a = 7\n",
     "b = 1 / 3\n",
     "c = a + b\n",
-    "print('a:    ', a)\n",
-    "print('b:    ', b)\n",
-    "print('c:    ', c)\n",
-    "print('b:     {:0.4f}'.format(b))\n",
-    "print('a + b:', a + b)"
+    "print('a:     ', a)\n",
+    "print('b:     ', b)\n",
+    "print('c:     ', c)\n",
+    "print('b:      {:0.4f}'.format(b))\n",
+    "print('a + b: ', a + b)"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "1bfc6ffb",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"strings)\"></a>\n",
@@ -272,25 +281,27 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "276cb884",
    "metadata": {},
    "outputs": [],
    "source": [
     "a = 'Hello'\n",
     "b = \"Kitty\"\n",
-    "c = '''\n",
+    "c = \"\"\"\n",
     "Magic\n",
     "multi-line\n",
     "strings!\n",
-    "'''\n",
+    "\"\"\"\n",
     "\n",
     "print(a, b)\n",
     "print(a + b)\n",
-    "print('{}, {}!'.format(a, b))\n",
+    "print(f'{a}, {b}!')\n",
     "print(c)"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "f233a287",
    "metadata": {},
    "source": [
     "String objects have a number of useful methods:"
@@ -299,6 +310,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "479ad215",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -309,6 +321,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "89132c40",
    "metadata": {},
    "source": [
     "Another useful method is:"
@@ -317,6 +330,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "74773e8f",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -327,6 +341,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "3d070148",
    "metadata": {},
    "source": [
     "Two common and convenient string methods are `strip()` and `split()`.  The\n",
@@ -336,6 +351,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "442e0a9b",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -346,6 +362,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "9ff59d32",
    "metadata": {},
    "source": [
     "With `split()` we can tokenize a string (to turn it into a list of strings)\n",
@@ -355,6 +372,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "7c7d9f09",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -364,6 +382,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "d5485806",
    "metadata": {},
    "source": [
     "We can also use the `join` method to re-construct a new string. Imagine that\n",
@@ -374,6 +393,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "e546a282",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -382,6 +402,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "a3f3c49e",
    "metadata": {},
    "source": [
     "`strip`, `split` and `join` makes this job trivial:"
@@ -390,15 +411,17 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "6a6e0823",
    "metadata": {},
    "outputs": [],
    "source": [
-    "print('Original:               {}'.format(data))\n",
-    "print('Strip, split, and join: {}'.format(' '.join(data.strip().split(','))))"
+    "print(f'Original:              {data}')\n",
+    "print('Strip, split, and join:', ' '.join(data.strip().split(',')))"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "c5009202",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"lists-and-tuples\"></a>\n",
@@ -417,6 +440,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "8114c7c6",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -435,6 +459,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "fefe91af",
    "metadata": {},
    "source": [
     "The key difference between lists and tuples is that tuples are *immutable*\n",
@@ -444,6 +469,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "3277edf9",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -454,6 +480,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "c52a32cb",
    "metadata": {},
    "source": [
     "Square brackets are used to index tuples, lists, strings, dictionaries, etc.\n",
@@ -463,6 +490,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "710c4f99",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -472,6 +500,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "e57f4f8a",
    "metadata": {},
    "source": [
     "> **MATLAB pitfall:** Python uses zero-based indexing, unlike MATLAB, where\n",
@@ -481,6 +510,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "3f0cf402",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -491,6 +521,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "44726855",
    "metadata": {},
    "source": [
     "A range of values for the indices can be specified to extract values from a\n",
@@ -500,6 +531,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "59c8d4a9",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -508,6 +540,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "0beb8aed",
    "metadata": {},
    "source": [
     "> **MATLAB pitfall:** Note that Python's slicing syntax is different from\n",
@@ -523,6 +556,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "44c5a48c",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -534,6 +568,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "56b622fa",
    "metadata": {},
    "source": [
     "You can also change the step size, which is specified by the third value (not\n",
@@ -543,6 +578,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "2c9b61e4",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -553,6 +589,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "3949cc29",
    "metadata": {},
    "source": [
     "Some methods are available on `list` objects for adding and removing items:"
@@ -561,6 +598,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "f96a3e31",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -579,6 +617,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "4cf71af8",
    "metadata": {},
    "source": [
     "What will `d.append([50,60])` do, and how is it different from\n",
@@ -588,6 +627,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "ac1fce51",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -597,6 +637,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "15a01466",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"dictionaries\"></a>\n",
@@ -611,6 +652,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "051312df",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -623,6 +665,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "e39b639f",
    "metadata": {},
    "source": [
     "Like lists (and unlike tuples), dicts are mutable, and have a number of\n",
@@ -632,6 +675,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "db998eb1",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -645,6 +689,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "11002f02",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"a-note-on-mutability\"></a>\n",
@@ -665,6 +710,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "14b8bfc8",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -677,6 +723,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "ad4a61a6",
    "metadata": {},
    "source": [
     "In contrast, when you pass a mutable value around, you are passing a\n",
@@ -688,6 +735,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "2852dd29",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -703,6 +751,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "3405fef2",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"flow-control\"></a>\n",
@@ -724,6 +773,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "fa3a015c",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -740,6 +790,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "66809170",
    "metadata": {},
    "source": [
     "There is also the `in` test for strings, lists, etc:"
@@ -748,6 +799,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "69c83d4a",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -758,6 +810,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "5c2a73d3",
    "metadata": {},
    "source": [
     "We can use boolean values in `if`-`else` conditional expressions:"
@@ -766,19 +819,21 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "ae10c994",
    "metadata": {},
    "outputs": [],
    "source": [
     "a = [1, 2, 3, 4]\n",
     "val = 3\n",
     "if val in a:\n",
-    "    print('Found {}!'.format(val))\n",
+    "    print(f'Found {val}!')\n",
     "else:\n",
-    "    print('{} not found :('.format(val))"
+    "    print(f'{val} not found :(')"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "bbaad787",
    "metadata": {},
    "source": [
     "Note that the indentation in the `if`-`else` statement is **crucial**.\n",
@@ -793,6 +848,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "feb11366",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -803,6 +859,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "2d0b9802",
    "metadata": {},
    "source": [
     "You can also loop over the key-value pairs in a dict:"
@@ -811,23 +868,25 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "016a0b9a",
    "metadata": {},
    "outputs": [],
    "source": [
     "a = {'a' : 10, 'b' : 20, 'c' : 30}\n",
-    "print('a.items()')\n",
-    "for key, val in a.items():\n",
-    "    print(key, val)\n",
     "print('a.keys()')\n",
     "for key in a.keys():\n",
     "    print(key, a[key])\n",
     "print('a.values()')\n",
     "for val in a.values():\n",
-    "    print(val)"
+    "    print(val)\n",
+    "print('a.items()')\n",
+    "for key, val in a.items():\n",
+    "    print(key, val)"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "5ecfcb80",
    "metadata": {},
    "source": [
     "> In older versions of Python 3, there was no guarantee of ordering when using dictionaries.\n",
@@ -847,21 +906,23 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "bf4d0dbb",
    "metadata": {},
    "outputs": [],
    "source": [
     "d = [10, 20, 30]\n",
     "print('Using the range function')\n",
     "for i in range(len(d)):\n",
-    "    print('element at position {}: {}'.format(i, d[i]))\n",
+    "    print(f'element at position {i}: {d[i]}')\n",
     "\n",
     "print('Using the enumerate function')\n",
     "for i, elem in enumerate(d):\n",
-    "    print('element at position {}: {}'.format(i, elem))"
+    "    print(f'element at position {i}: {elem}')"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "2537a8f3",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\" list-comprehensions\"></a>\n",
@@ -876,17 +937,19 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "7f2bd1ce",
    "metadata": {},
    "outputs": [],
    "source": [
     "strings = ['hello', 'howdy', 'hi', 'hey']\n",
     "nchars = [len(s) for s in strings]\n",
     "for s, c in zip(strings, nchars):\n",
-    "    print('{}: {}'.format(s, c))"
+    "    print(f'{s}: {c}')"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "c7bd81f1",
    "metadata": {},
    "source": [
     "> The `zip` function \"zips\" two or more sequences, so you can loop over them\n",
@@ -899,17 +962,19 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "e3542daa",
    "metadata": {},
    "outputs": [],
    "source": [
     "nchars = { s : len(s) for s in strings }\n",
     "\n",
     "for s, c in nchars.items():\n",
-    "    print('{}: {}'.format(s, c))"
+    "    print(f'{s}: {c}')"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "b09e20ec",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"reading-and-writing-text-files\"></a>\n",
@@ -938,6 +1003,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "386b53ba",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -947,6 +1013,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "888c2a4c",
    "metadata": {},
    "source": [
     "A very similar syntax is used to write files:"
@@ -955,6 +1022,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "5bdb2fcc",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -965,6 +1033,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "21cca2ce",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"example-processing-lesion-counts\"></a>\n",
@@ -979,6 +1048,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "3be76086",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -988,6 +1058,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "0c6e4b1f",
    "metadata": {},
    "source": [
     "We may wish to process this data in another application (e.g. Excel or SPSS).\n",
@@ -997,17 +1068,19 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "4ee09755",
    "metadata": {},
    "outputs": [],
    "source": [
     "with open('lesion_counts.csv', 'w') as f:\n",
     "    f.write('Subject ID, Lesion count\\n')\n",
     "    for subj_id, count in zip(subject_ids, lesion_counts):\n",
-    "        f.write('{}, {}\\n'.format(subj_id, count))"
+    "        f.write(f'{subj_id}, {count}\\n')"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "01538f4b",
    "metadata": {},
    "source": [
     "We can now load the `lesion_counts.csv` file into our analysis software of\n",
@@ -1018,6 +1091,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "9df720ba",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1032,11 +1106,12 @@
     "\n",
     "print('Loaded lesion counts:')\n",
     "for subj, count in lesion_counts.items():\n",
-    "    print('{}: {}'.format(subj, count))"
+    "    print(f'{subj}: {count}')"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "25ecd7db",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"functions\"></a>\n",
@@ -1061,6 +1136,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "70ea8549",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1079,6 +1155,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "60d3d252",
    "metadata": {},
    "source": [
     "> Note that the `_` is used as shorthand here for a dummy variable\n",
@@ -1095,6 +1172,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "4b3b5f32",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1113,6 +1191,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "a5983a86",
    "metadata": {},
    "source": [
     "You will often see python functions called with these named arguments. In\n",
@@ -1130,6 +1209,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "e0e53f1c",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1145,6 +1225,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "89b37ef2",
    "metadata": {},
    "source": [
     "<a class=\"anchor\" id=\"working-with-numpy\"></a>\n",
@@ -1173,6 +1254,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "ea408674",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1181,6 +1263,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "0fe6304b",
    "metadata": {},
    "source": [
     "You could also emulate a 2D or ND matrix by using lists of lists, for example:"
@@ -1189,6 +1272,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "0f3e62a6",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1199,6 +1283,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "cd708cc7",
    "metadata": {},
    "source": [
     "For simple tasks, you could stick with processing your data using python\n",
@@ -1234,6 +1319,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "dc215a0b",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1252,6 +1338,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "bfacc99a",
    "metadata": {},
    "source": [
     "> Numpy is not a \"built-in\" library, so we have to import it. The statement\n",
@@ -1270,6 +1357,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "a1c2c0d1",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1287,6 +1375,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "3db10698",
    "metadata": {},
    "source": [
     "The `zeros` and `ones` functions can also be used to generate N-dimensional\n",
@@ -1296,6 +1385,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "a24da68d",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1307,6 +1397,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "fdbb9c24",
    "metadata": {},
    "source": [
     "> Note that, in a 2D Numpy array, the first axis corresponds to rows, and the\n",
@@ -1332,6 +1423,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "7072de1e",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1342,6 +1434,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "bbe6f261",
    "metadata": {},
    "source": [
     "But you can also specify the delimiter to expect<sup>1</sup>:"
@@ -1350,6 +1443,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "d7eca1cd",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1360,6 +1454,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "337383bc",
    "metadata": {},
    "source": [
     "> <sup>1</sup> And many other things such as file headers, footers, comments,\n",
@@ -1375,6 +1470,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "6cb9d979",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1384,6 +1480,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "84461b92",
    "metadata": {},
    "source": [
     "Jupyter notebooks have a special feature - if you start a line with a `!`\n",
@@ -1394,6 +1491,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "e4e1bee1",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1402,6 +1500,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "dc4cf4a2",
    "metadata": {},
    "source": [
     "> The `!` feature won't work in regular Python scripts.\n",
@@ -1414,6 +1513,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
+   "id": "07142a65",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1421,11 +1521,11 @@
     "colmeans = data.mean(axis=0)\n",
     "\n",
     "print('Column means')\n",
-    "print('\\n'.join(['{}: {:0.2f}'.format(i, m) for i, m in enumerate(colmeans)]))"
+    "print('\\n'.join([f'{i}: {m:0.2f}' for i, m in enumerate(colmeans)]))"
    ]
   }
  ],
  "metadata": {},
  "nbformat": 4,
- "nbformat_minor": 4
+ "nbformat_minor": 5
 }
diff --git a/getting_started/00_overview.md b/getting_started/00_overview.md
index 8cb418151d878dbf30919488151f71a928016305..3722ffa9239cea7a2f04d6f4944571f4d353c88c 100644
--- a/getting_started/00_overview.md
+++ b/getting_started/00_overview.md
@@ -218,11 +218,11 @@ types). This is just like how things work in MATLAB.
 a = 7
 b = 1 / 3
 c = a + b
-print('a:    ', a)
-print('b:    ', b)
-print('c:    ', c)
-print('b:     {:0.4f}'.format(b))
-print('a + b:', a + b)
+print('a:     ', a)
+print('b:     ', b)
+print('c:     ', c)
+print('b:      {:0.4f}'.format(b))
+print('a + b: ', a + b)
 ```
 
 
@@ -233,15 +233,15 @@ print('a + b:', a + b)
 ```
 a = 'Hello'
 b = "Kitty"
-c = '''
+c = """
 Magic
 multi-line
 strings!
-'''
+"""
 
 print(a, b)
 print(a + b)
-print('{}, {}!'.format(a, b))
+print(f'{a}, {b}!')
 print(c)
 ```
 
@@ -301,8 +301,8 @@ data = ' 1,2,3,4,5,6,7  '
 
 
 ```
-print('Original:               {}'.format(data))
-print('Strip, split, and join: {}'.format(' '.join(data.strip().split(','))))
+print(f'Original:              {data}')
+print('Strip, split, and join:', ' '.join(data.strip().split(',')))
 ```
 
 
@@ -551,9 +551,9 @@ We can use boolean values in `if`-`else` conditional expressions:
 a = [1, 2, 3, 4]
 val = 3
 if val in a:
-    print('Found {}!'.format(val))
+    print(f'Found {val}!')
 else:
-    print('{} not found :('.format(val))
+    print(f'{val} not found :(')
 ```
 
 
@@ -578,15 +578,15 @@ You can also loop over the key-value pairs in a dict:
 
 ```
 a = {'a' : 10, 'b' : 20, 'c' : 30}
-print('a.items()')
-for key, val in a.items():
-    print(key, val)
 print('a.keys()')
 for key in a.keys():
     print(key, a[key])
 print('a.values()')
 for val in a.values():
     print(val)
+print('a.items()')
+for key, val in a.items():
+    print(key, val)
 ```
 
 
@@ -608,11 +608,11 @@ There are some handy built-in functions that you can use with `for` loops:
 d = [10, 20, 30]
 print('Using the range function')
 for i in range(len(d)):
-    print('element at position {}: {}'.format(i, d[i]))
+    print(f'element at position {i}: {d[i]}')
 
 print('Using the enumerate function')
 for i, elem in enumerate(d):
-    print('element at position {}: {}'.format(i, elem))
+    print(f'element at position {i}: {elem}')
 ```
 
 
@@ -629,7 +629,7 @@ number of characters in each of them:
 strings = ['hello', 'howdy', 'hi', 'hey']
 nchars = [len(s) for s in strings]
 for s, c in zip(strings, nchars):
-    print('{}: {}'.format(s, c))
+    print(f'{s}: {c}')
 ```
 
 
@@ -644,7 +644,7 @@ Or we could store the character counts in a dict:
 nchars = { s : len(s) for s in strings }
 
 for s, c in nchars.items():
-    print('{}: {}'.format(s, c))
+    print(f'{s}: {c}')
 ```
 
 
@@ -710,7 +710,7 @@ Let's save the results out to a CSV (comma-separated value) file:
 with open('lesion_counts.csv', 'w') as f:
     f.write('Subject ID, Lesion count\n')
     for subj_id, count in zip(subject_ids, lesion_counts):
-        f.write('{}, {}\n'.format(subj_id, count))
+        f.write(f'{subj_id}, {count}\n')
 ```
 
 
@@ -731,7 +731,7 @@ with open('lesion_counts.csv', 'r') as f:
 
 print('Loaded lesion counts:')
 for subj, count in lesion_counts.items():
-    print('{}: {}'.format(subj, count))
+    print(f'{subj}: {count}')
 ```
 
 
@@ -1016,5 +1016,5 @@ data     = np.loadtxt('00_overview/2d_array.txt', comments='%')
 colmeans = data.mean(axis=0)
 
 print('Column means')
-print('\n'.join(['{}: {:0.2f}'.format(i, m) for i, m in enumerate(colmeans)]))
+print('\n'.join([f'{i}: {m:0.2f}' for i, m in enumerate(colmeans)]))
 ```