diff --git a/auto/Examples/specular/Basic.py b/auto/Examples/specular/Basic.py
new file mode 100755
index 0000000000000000000000000000000000000000..fee43d8ced1035c6cdd0816f6da01adfef9f88dd
--- /dev/null
+++ b/auto/Examples/specular/Basic.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+"""
+"""
+import numpy as np
+import bornagain as ba
+from bornagain import ba_plot as bp, nm
+
+def get_sample():
+    # Materials
+    material_A = ba.MaterialBySLD("A", 5e-06, 0)
+    material_substrate = ba.MaterialBySLD("Substrate", 2e-06, 0)
+
+    # Layers
+    ambient_layer = ba.Layer(ba.Vacuum())
+    film = ba.Layer(material_A, 30*nm)
+    substrate_layer = ba.Layer(material_substrate)
+
+    # Sample
+    sample = ba.MultiLayer()
+    sample.addLayer(ambient_layer)
+    sample.addLayer(film)
+    sample.addLayer(substrate_layer)
+
+    return sample
+
+def get_simulation(sample):
+    "Specular simulation with a qz-defined beam"
+    n = 500
+    qzs = np.linspace(0.01, 1, n)  # qz-values
+    scan = ba.QzScan(qzs)
+    return ba.SpecularSimulation(scan, sample)
+
+
+if __name__ == '__main__':
+    sample = get_sample()
+    simulation = get_simulation(sample)
+    result = simulation.simulate()
+    bp.plot_simulation_result(result)
diff --git a/auto/Examples/varia/OpaqueProfile1.py b/auto/Examples/varia/OpaqueProfile1.py
new file mode 100755
index 0000000000000000000000000000000000000000..208ece32fa87af3bc3871f01237f58994d1249ca
--- /dev/null
+++ b/auto/Examples/varia/OpaqueProfile1.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+"""
+Depth profile of an opaque sample.
+"""
+import bornagain as ba
+from bornagain import angstrom, ba_plot as bp, deg, nm
+
+#  beam data
+ai_min = 0  # minimum incident angle
+ai_max = 1*deg  # maximum incident angle
+wl = 0.03*nm  # wavelength in angstroms
+
+#  depth position span
+z_min = -400*nm
+z_max = 100*nm
+
+
+def get_sample():
+    # Define materials
+    material_vac = ba.RefractiveMaterial("Vac", 0, 0)
+    material_A = ba.RefractiveMaterial("A", 1e-5, 3e-6)
+
+    # Define layers
+    layer_top = ba.Layer(material_vac)
+    layer_1 = ba.Layer(material_A, 300*nm)
+    layer_bot = ba.Layer(material_vac)
+
+    # Define sample
+    sample = ba.MultiLayer()
+    sample.addLayer(layer_top)
+    sample.addLayer(layer_1)
+    sample.addLayer(layer_bot)
+
+    return sample
+
+
+def get_simulation(sample):
+    """
+    Returns a depth-probe simulation.
+    """
+    nz = bp.simargs['n']
+    na = 10*nz
+
+    scan = ba.AlphaScan(na, ai_min, ai_max)
+    scan.setWavelength(wl)
+    footprint = ba.FootprintSquare(0.01)
+    scan.setFootprint(footprint)
+
+    z_axis = ba.FixedBinAxis("z", nz, z_min, z_max)
+    simulation = ba.DepthprobeSimulation(scan, sample, z_axis)
+
+    return simulation
+
+
+if __name__ == '__main__':
+    bp.parse_args(sim_n=500, aspect='auto', intensity_max=1, intensity_min=1e-200)
+    sample = get_sample()
+    simulation = get_simulation(sample)
+    result = simulation.simulate()
+    bp.plot_simulation_result(result)
diff --git a/auto/MiniExamples/specular/Basic.py b/auto/MiniExamples/specular/Basic.py
new file mode 100755
index 0000000000000000000000000000000000000000..ef19e891e4224b0cbd5cba58384498a5ed37e94d
--- /dev/null
+++ b/auto/MiniExamples/specular/Basic.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+"""
+"""
+import numpy as np
+import bornagain as ba
+from bornagain import ba_plot as bp, nm
+
+def get_sample():
+    # Materials
+    material_A = ba.MaterialBySLD("A", 5e-06, 0)
+    material_substrate = ba.MaterialBySLD("Substrate", 2e-06, 0)
+
+    # Layers
+    ambient_layer = ba.Layer(ba.Vacuum())
+    film = ba.Layer(material_A, 30*nm)
+    substrate_layer = ba.Layer(material_substrate)
+
+    # Sample
+    sample = ba.MultiLayer()
+    sample.addLayer(ambient_layer)
+    sample.addLayer(film)
+    sample.addLayer(substrate_layer)
+
+    return sample
+
+def get_simulation(sample):
+    "Specular simulation with a qz-defined beam"
+    n = 50
+    qzs = np.linspace(0.01, 1, n)  # qz-values
+    scan = ba.QzScan(qzs)
+    return ba.SpecularSimulation(scan, sample)
+
+
+if __name__ == '__main__':
+    sample = get_sample()
+    simulation = get_simulation(sample)
+    result = simulation.simulate()
+    bp.plot_simulation_result(result)
diff --git a/auto/MiniExamples/varia/OpaqueProfile1.py b/auto/MiniExamples/varia/OpaqueProfile1.py
new file mode 100755
index 0000000000000000000000000000000000000000..208ece32fa87af3bc3871f01237f58994d1249ca
--- /dev/null
+++ b/auto/MiniExamples/varia/OpaqueProfile1.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+"""
+Depth profile of an opaque sample.
+"""
+import bornagain as ba
+from bornagain import angstrom, ba_plot as bp, deg, nm
+
+#  beam data
+ai_min = 0  # minimum incident angle
+ai_max = 1*deg  # maximum incident angle
+wl = 0.03*nm  # wavelength in angstroms
+
+#  depth position span
+z_min = -400*nm
+z_max = 100*nm
+
+
+def get_sample():
+    # Define materials
+    material_vac = ba.RefractiveMaterial("Vac", 0, 0)
+    material_A = ba.RefractiveMaterial("A", 1e-5, 3e-6)
+
+    # Define layers
+    layer_top = ba.Layer(material_vac)
+    layer_1 = ba.Layer(material_A, 300*nm)
+    layer_bot = ba.Layer(material_vac)
+
+    # Define sample
+    sample = ba.MultiLayer()
+    sample.addLayer(layer_top)
+    sample.addLayer(layer_1)
+    sample.addLayer(layer_bot)
+
+    return sample
+
+
+def get_simulation(sample):
+    """
+    Returns a depth-probe simulation.
+    """
+    nz = bp.simargs['n']
+    na = 10*nz
+
+    scan = ba.AlphaScan(na, ai_min, ai_max)
+    scan.setWavelength(wl)
+    footprint = ba.FootprintSquare(0.01)
+    scan.setFootprint(footprint)
+
+    z_axis = ba.FixedBinAxis("z", nz, z_min, z_max)
+    simulation = ba.DepthprobeSimulation(scan, sample, z_axis)
+
+    return simulation
+
+
+if __name__ == '__main__':
+    bp.parse_args(sim_n=500, aspect='auto', intensity_max=1, intensity_min=1e-200)
+    sample = get_sample()
+    simulation = get_simulation(sample)
+    result = simulation.simulate()
+    bp.plot_simulation_result(result)