diff --git a/main.tex b/main.tex
index a399bbac748905a8d59eb2940e15afd0bda07ea3..08bca1f309f64a6a64d04b2e1aaf937f5bcd67f8 100644
--- a/main.tex
+++ b/main.tex
@@ -490,92 +490,9 @@ Recalling how the sign of $\nu_{\alpha,\beta}(\pm u)$ changes (illustrated in
 Fig \ref{fig:charact_curves_vis}), we can eliminate cases 1 and 2.
 
 \begin{sagesilent}
-def hyperbola_intersection_plot():
-  var("alpha beta", domain="real")
-  coords_range = (beta, -3, -1/2), (alpha, 0, 2.5)
-  delta1 = -sqrt(2)+1/100
-  delta2 = 1/2
-  pbeta=-1.5
-  text_args = {"fontsize":"large", "clip":True}
-  black_text_args = {"rgbcolor":"black", **text_args}
-  p = (
-    implicit_plot( beta^2 - alpha^2 == 2,
-        *coords_range , rgbcolor = "black", legend_label=r"a")
-    + implicit_plot( (beta+4)^2 - (alpha)^2 == 2,
-        *coords_range , rgbcolor = "red")
-    + implicit_plot( (beta+delta1)^2 - alpha^2 == (delta1-2)^2-2,
-        *coords_range , rgbcolor = "blue")
-    + implicit_plot( (beta+delta2)^2 - alpha^2 == (delta2-2)^2-2,
-        *coords_range , rgbcolor = "green")
-    + point([-2, sqrt(2)], size=50, rgbcolor="black", zorder=50)
-    + text("Q",[-2, sqrt(2)+0.1], **black_text_args)
-    + point([pbeta, sqrt(pbeta^2-2)], size=50, rgbcolor="black", zorder=50)
-    + text("P",[pbeta+0.1, sqrt(pbeta^2-2)], **black_text_args)
-    + circle((-2,0),sqrt(2), linestyle="dashed", rgbcolor="purple")
-    # dummy lines to add legends (circumvent bug in implicit_plot)
-    + line([(2,0),(2,0)] , rgbcolor = "purple", linestyle="dotted",
-        legend_label=r"pseudo-wall")
-    + line([(2,0),(2,0)] , rgbcolor = "black",
-        legend_label=r"$\Theta_v^-$")
-    + line([(2,0),(2,0)] , rgbcolor = "red", legend_label=r"$\Theta_u$ case 1")
-    + line([(2,0),(2,0)] , rgbcolor = "blue", legend_label=r"$\Theta_u$ case 2")
-    + line([(2,0),(2,0)] , rgbcolor = "green", legend_label=r"$\Theta_u$ case 3")
-  )
-  p.set_legend_options(loc="upper right", font_size="x-large",
-    font_family="serif")
-  p.xmax(coords_range[0][2])
-  p.xmin(coords_range[0][1])
-  p.ymax(coords_range[1][2])
-  p.ymin(coords_range[1][1])
-  p.axes_labels([r"$\beta$", r"$\alpha$"])
-  return p
-
-def correct_hyperbola_intersection_plot():
-  var("alpha beta", domain="real")
-  coords_range = (beta, -2.5, 0.5), (alpha, 0, 3)
-  delta2 = 1/2
-  pbeta=-1.5
-  text_args = {"fontsize":"large", "clip":True}
-  black_text_args = {"rgbcolor":"black", **text_args}
-  p = (
-    implicit_plot( beta^2 - alpha^2 == 2,
-        *coords_range , rgbcolor = "black", legend_label=r"a")
-    + implicit_plot((beta+delta2)^2 - alpha^2 == (delta2-2)^2-2,
-        *coords_range , rgbcolor = "green")
-    + point([-2, sqrt(2)], size=50, rgbcolor="black", zorder=50)
-    + text("Q",[-2, sqrt(2)+0.1], **black_text_args)
-    + point([pbeta, sqrt(pbeta^2-2)], size=50, rgbcolor="black", zorder=50)
-    + text("P",[pbeta+0.1, sqrt(pbeta^2-2)], **black_text_args)
-    + circle((-2,0),sqrt(2), linestyle="dashed", rgbcolor="purple")
-    # dummy lines to add legends (circumvent bug in implicit_plot)
-    + line([(2,0),(2,0)] , rgbcolor = "purple", linestyle="dotted",
-        legend_label=r"pseudo-wall")
-    + line([(2,0),(2,0)] , rgbcolor = "black",
-        legend_label=r"$\Theta_v^-$")
-    + line([(2,0),(2,0)] , rgbcolor = "green",
-        legend_label=r"$\Theta_u^-$")
-    # vertical characteristic lines
-    + line([(0,0),(0,coords_range[1][2])],
-        rgbcolor="black", linestyle="dashed",
-        legend_label=r"$V_v$")
-    + line([(-delta2,0),(-delta2,coords_range[1][2])],
-        rgbcolor="green", linestyle="dashed",
-        legend_label=r"$V_u$")
-    + line([(-delta2,0),(-delta2-coords_range[1][2],coords_range[1][2])],
-        rgbcolor="green", linestyle="dotted",
-        legend_label=r"$\Theta_u^-$ assymptote")
-    + line([(0,0),(-coords_range[1][2],coords_range[1][2])],
-        rgbcolor="black", linestyle="dotted",
-        legend_label=r"$\Theta_v^-$ assymptote")
-  )
-  p.set_legend_options(loc="upper right", font_size="x-large",
-    font_family="serif")
-  p.xmax(coords_range[0][2])
-  p.xmin(coords_range[0][1])
-  p.ymax(coords_range[1][2])
-  p.ymin(coords_range[1][1])
-  p.axes_labels([r"$\beta$", r"$\alpha$"])
-  return p
+from plots_and_expressions import \
+hyperbola_intersection_plot, \
+correct_hyperbola_intersection_plot
 \end{sagesilent}
 
 \begin{figure}