diff --git a/Doc/Sd1/Exam/2018/Summer/exam.xml b/Doc/Sd1/Exam/2018/Summer/exam.xml
index a6854a266aac65c0a1ec0fc8db85cb09f1e7028f..2cc20a120f848238ab4b6125722bb8f0b03f1512 100644
--- a/Doc/Sd1/Exam/2018/Summer/exam.xml
+++ b/Doc/Sd1/Exam/2018/Summer/exam.xml
@@ -179,6 +179,27 @@ Generating /home/xy123/Downloads/Exam/Solve/target/site/apidocs/help-doc.html...
         </itemizedlist>
       </caution>
     </section>
+
+    <section xml:id="sd1_exam_2018_summer_solve1">
+      <title>Lösung</title>
+
+      <itemizedlist>
+        <listitem>
+          <para>Klassen <classname
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2018summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/aufgabe1/StringHelper.java">StringHelper</classname>,
+          <classname
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2018summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/aufgabe1/MathHelper.java">MathHelper</classname>
+          und <classname
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2018summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/aufgabe1/ArrayHelper.java">ArrayHelper</classname>
+          .</para>
+        </listitem>
+
+        <listitem>
+          <para><productname>Maven</productname> Projekt mit <filename
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2018summer/Solve/pom.xml">pom.xml</filename>.</para>
+        </listitem>
+      </itemizedlist>
+    </section>
   </section>
 
   <section xml:id="sd1_exam_2018_summer_task2">
@@ -302,6 +323,22 @@ Ball / Fahrrad: false</screen></td>
         </listitem>
       </itemizedlist>
     </section>
+
+    <section xml:id="sd1_exam_2018_summer_solve2">
+      <title>Lösung</title>
+
+      <itemizedlist>
+        <listitem>
+          <para>Die Klasse <classname
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2018summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/aufgabe2/Artikel.java">Artikel</classname>.</para>
+        </listitem>
+
+        <listitem>
+          <para><productname>Maven</productname> Projekt mit <filename
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2018summer/Solve/pom.xml">pom.xml</filename>.</para>
+        </listitem>
+      </itemizedlist>
+    </section>
   </section>
 
   <section xml:id="sd1_exam_2018_summer_task3">
@@ -354,12 +391,36 @@ System.out.println("Wertvergleich int mit long: " +
     </informaltable>
 
     <para>Erklären Sie dieses unterschiedliche Ergebnis <code
-    language="java">true</code> vs. <code language="java">false</code>.</para>
+    language="java">true</code> <abbrev>vs.</abbrev> <code
+    language="java">false</code>.</para>
 
     <para>Hinweis: Wie wird die <methodname
     xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname>
     Methode in Bezug auf Instanzen »fremder« Klassen implementiert? Was
     bewirken die Zuweisungen?</para>
+
+    <section xml:id="sd1_exam_2018_summer_solve3">
+      <title>Lösung</title>
+
+      <para>Die beiden Objekte <code language="java">x</code> vom Typ
+      <classname
+      xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html">Integer</classname>
+      und <code language="java">y</code> vom Typ <classname
+      xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Long.html">Long</classname>
+      repräsentieren den identischen Wert 44. Es sind aber Instanzen
+      verschiedener Klassen.</para>
+
+      <para>Die Ãœberschreibung der <methodname
+      xlink:href="https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)">equals(...)</methodname>
+      Methode prüft zunächst, ob die beiden beteiligten Instanzen zur selben
+      Klasse gehören, wie <abbrev>z.B.</abbrev> in <link
+      linkend="sd1_coreclasses_fig_hashExample"><classname>Rectangle</classname>.<methodname>equals(..)</methodname></link>.</para>
+
+      <para>Da <code language="java">x</code> und <code
+      language="java">y</code> zu verschiedenen Klassen gehören, liefert <code
+      language="java">x.equals(y)</code> unabhängig vom repräsentierten Wert
+      stets <code language="java">false</code>.</para>
+    </section>
   </section>
 
   <section xml:id="sd1_exam_2018_summer_task4">
@@ -379,33 +440,72 @@ System.out.println("Wertvergleich int mit long: " +
   void toString();
 }</programlisting></td>
 
-        <td valign="top">'toString()' in 'de.hdm_stuttgart.mi.sd1.iface.Konto'
-        clashes with 'toString()' in 'java.lang.Object'; attempting to use
-        incompatible return type</td>
+        <td valign="top" xml:lang="en">'toString()' in
+        'de.hdm_stuttgart.mi.sd1.iface.Konto' clashes with 'toString()' in
+        'java.lang.Object'; attempting to use incompatible return type</td>
       </tr>
     </informaltable>
 
     <para>Erläutern Sie die Ursache dieser Fehlermeldung. Welche Beziehung
     besteht zu <classname
     xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">java.lang.Object</classname>?</para>
+
+    <section xml:id="sd1_exam_2018_summer_solve4">
+      <title>Lösung</title>
+
+      <para>Eine beliebige Klasse <classname>X</classname> erbt, explizit oder
+      implizit, die Methode <methodname
+      xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals()</methodname>
+      aus . Falls <classname>X</classname> das Interface
+      <classname>Konto</classname> implementiert, so hätten wir z.B.:</para>
+
+      <programlisting language="java">public class X extends Object implements Konto {  
+   
+   // Vererbte Methode public String toString() {...} aus der Oberklasse Object
+   
+
+   // Konflikt; Identischer Name und Argumenttyp, aber anderer Return-Typ
+   public void toString() {
+       ...
+       return ...;
+   }
+}</programlisting>
+
+      <para>Wir verwenden nun die Methode:</para>
+
+      <programlisting language="java">final Class X = new X();
+x.toString();</programlisting>
+
+      <para>Methodensignaturen berücksichtigen nicht den Return-Typ einer
+      Methode. Da <xref linkend="glo_Java"/> <link
+      linkend="sd1_fig_distinctReturnType">nur Methodensignaturen
+      kennt</link>, kann der Compiler die beiden Methoden nicht unterscheiden
+      und somit auch nicht zwischen ihnen auswählen.</para>
+
+      <para>Aus diesem Grund dürfen <xref linkend="glo_Java"/> <code
+      language="java">interface</code> Deklarationen generell keine
+      Methoden-Signaturkonflikte zu <classname
+      xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">java.lang.Object</classname>
+      haben.</para>
+    </section>
   </section>
 
   <section xml:id="sd1_exam_2018_summer_task5">
     <title>Farbwerte, <code language="java">byte</code> und <code
     language="java">int</code></title>
 
-    <para>Ein Entwickler möchte Farbwerte nach dem RGB Modell abbilden. Die
-    drei Farbkomponenten rot, grün und blau stellt er jeweils als <code
-    language="java">byte</code> dar. Er setzt den byte Wert -128 zu null und
-    127 als Maximalwert des jeweiligen Farbanteils fest. Das (rgb) Tripel
-    (-128, 0, 127) entspricht also null Rotanteil, mittlerem Gelbanteil und
-    maximalem Blauanteil.</para>
+    <para>Ein Entwickler möchte Farbwerte nach dem <abbrev>RGB</abbrev> Modell
+    abbilden. Die drei Farbkomponenten rot, grün und blau stellt er jeweils
+    als <code language="java">byte</code> dar. Er setzt den byte Wert -128 zu
+    null und 127 als Maximalwert des jeweiligen Farbanteils fest. Das
+    <abbrev>RGB</abbrev> Tripel <code>(-128, 0, 127)</code> entspricht also
+    null Rotanteil, mittlerem Gelbanteil und maximalem Blauanteil.</para>
 
     <para>Der Entwickler möchte den Farbwert in einer fremden, von ihm nicht
-    veränderbaren, Klasse darstellen. Dort kann er ein nicht mehr genutztes
+    veränderbaren, Klasse darstellen. Dort kann er ein nicht mehr benutztes
     <code language="java">int</code> Attribut verwenden. Er möchte die drei
-    Farbanteile in einen int Wert umwandeln und plant dazu eine entsprechende
-    Methode:</para>
+    Farbanteile in einen <code language="java">int</code> Wert umwandeln und
+    plant dazu eine entsprechende Methode:</para>
 
     <programlisting language="java">/**
  * Wandele die drei Farbanteile (r, g, b) einer Farbe in einen int
@@ -422,7 +522,7 @@ static public int rgb2int(final byte r, final byte g, final byte b) {
 
     <para>Zudem möchte er diese <code language="java">int</code> Werte auch
     wieder eindeutig in die drei Farbanteile zurückwandeln können, um so die
-    ursprünglichen RGB Anteile zu erhalten:</para>
+    ursprünglichen <abbrev>RGB</abbrev> Anteile zu erhalten:</para>
 
     <programlisting language="java">/**
  * Umwandlung eines int Farbwerts in die drei (r,g,b) Anteile. Gegenoperation
@@ -439,7 +539,15 @@ static public byte[] int2rgb(final int farbwert) {
     Aussage.</para>
 
     <tip>
-      <para>Betrachten Sie die zugrundliegenden Datentypen.</para>
+      <para>Betrachten Sie die zugrunde liegenden Datentypen.</para>
     </tip>
+
+    <section xml:id="sd1_exam_2018_summer_solve5">
+      <title>Lösung</title>
+
+      <para>Ein <code language="java">int</code> besteht aus vier Bytes und
+      bietet somit ausreichend Speicherplatz zur Aufnahme von drei <code
+      language="java">byte</code> Werten.</para>
+    </section>
   </section>
 </section>
diff --git a/Doc/Sd1/Exam/2019/Summer/exam.xml b/Doc/Sd1/Exam/2019/Summer/exam.xml
index 3f5f69dc9f78a40c2ce7aa13107aaccab2b6990a..8d559345809328c9ac016aa0c62d1290ae86f684 100644
--- a/Doc/Sd1/Exam/2019/Summer/exam.xml
+++ b/Doc/Sd1/Exam/2019/Summer/exam.xml
@@ -166,6 +166,24 @@
         </listitem>
       </itemizedlist>
     </section>
+
+    <section xml:id="sd1_exam_2019_summer_solve1">
+      <title>Solution</title>
+
+      <itemizedlist>
+        <listitem>
+          <para>Classes <classname
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/Helper.java">Helper</classname>
+          and <classname
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/HelperArray.java">HelperArray</classname>.</para>
+        </listitem>
+
+        <listitem>
+          <para>Maven project containing <filename
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2019summer/Solve/pom.xml">pom.xml</filename>.</para>
+        </listitem>
+      </itemizedlist>
+    </section>
   </section>
 
   <section xml:id="sd1_exam_2019_summer_task2">
@@ -227,6 +245,22 @@
         </listitem>
       </itemizedlist>
     </section>
+
+    <section xml:id="sd1_exam_2019_summer_solve2">
+      <title>Solution</title>
+
+      <itemizedlist>
+        <listitem>
+          <para>Classes <filename
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task2/ChangeAmount.java">ChangeAmount.java</filename>.</para>
+        </listitem>
+
+        <listitem>
+          <para>Maven project containing <filename
+          xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Klausuren/Sd1/2019summer/Solve/pom.xml">pom.xml</filename>.</para>
+        </listitem>
+      </itemizedlist>
+    </section>
   </section>
 
   <section xml:id="sd1_exam_2019_summer_task3">
diff --git a/Doc/Sd1/appendix.xml b/Doc/Sd1/appendix.xml
index 696c194130983164f90d8e6d463f5f5831512fb5..dd3f85239b41f586717c0d1d1c49ee1e46bf357f 100644
--- a/Doc/Sd1/appendix.xml
+++ b/Doc/Sd1/appendix.xml
@@ -35,7 +35,7 @@
 
         <listitem>
           <para>Subsequent transfer to read-only location <uri
-          xlink:href="https://klausur.mi.hdm-stuttgart.de/files/CheatSheet/Sd1">https://klausur.mi.hdm-stuttgart.de/files/CheatSheet/Sd1</uri>.</para>
+          xlink:href="https://learn.mi.hdm-stuttgart.de/files/CheatSheet/Sd1">https://learn.mi.hdm-stuttgart.de/files/CheatSheet/Sd1</uri>.</para>
         </listitem>
 
         <listitem>
diff --git a/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/Helper.java b/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/Helper.java
index 5114ff57f7e8ef24accbd577663c4964d050de43..16d681f20c383914fc2767157d414e705e5e6977 100644
--- a/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/Helper.java
+++ b/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/Helper.java
@@ -102,14 +102,14 @@ public class Helper {
         if (null == title) {
             return false;
         } else {
-            // Character.isLetter(...) not required: isUpperCase() returns false for non-letters anyway.
-            return 20 <= title.length() && Character.isUpperCase(title.charAt(0));
+            return 20 <= title.length() &&              // Character.isLetter(...) not being required:
+                Character.isUpperCase(title.charAt(0)); // isUpperCase() returns «false» for non-letters anyway.
         }
     }
 
     /** <p>Tell whether a given character is a vowel or not. The set of vowels is:</p>
      *
-     * <p><code>{a, e, i, o, u}</code> plus the five corresponding uppercase counterparts.</p>
+     * <p><code>{a, e, i, o, u}</code> and their five corresponding uppercase counterparts.</p>
      *
      * @param candidate The character to be examined.
      * @return <code>true</code> if the given character is a vowel, <code>false</code> otherwise.
@@ -117,17 +117,12 @@ public class Helper {
 
     static public boolean isVowel(final char candidate) {
 
-        switch(candidate) {
+        switch(Character.toLowerCase(candidate)) {
             case 'a':
             case 'e':
             case 'i':
             case 'o':
             case 'u':
-            case 'A':
-            case 'E':
-            case 'I':
-            case 'O':
-            case 'U':
             return true;
 
             default:
@@ -184,22 +179,21 @@ public class Helper {
      * input value.
      */
     static public int getNumberOfVowels(final String s) {
-
-        if (null == s) {
+        if (null == s) {                          // Handle special case
             return 0;
         } else {
-            // Alternative Java Stream solution
-            // return (int) s.chars().filter(c -> isVowel((char)c)).count();
-
-            int numberOfVowels = 0;
+            int numberOfVowels = 0;               // No vowel found yet.
 
-            for (final char c: s.toCharArray()) {
-                if (isVowel(c)) {
+            for (final char c: s.toCharArray()) { // Loop each string's character counting
+                if (isVowel(c)) {                 // vowel occurrences.
                     numberOfVowels++;
                 }
             }
             return numberOfVowels;
         }
+
+        // Alternative Java Stream solution:
+        // return (int) s.chars().filter(c -> isVowel((char)c)).count();
     }
 
     /**
@@ -244,11 +238,16 @@ public class Helper {
      *      <code>'.'</code> character. If no separation character is present, the entire name will be replaced.
      */
     public static String renameFileBasename(final String filename, final String newBasename) {
-        final int firstDotIndex = filename.indexOf('.');
-        if (firstDotIndex < 0) {
-            return newBasename;
-        } else {
-            return newBasename + filename.substring(firstDotIndex);
+
+        final int firstDotIndex = filename.indexOf('.'); // Find first dot (.) position within string, will be negative
+                                                         // if no dot is being found.
+
+        if (firstDotIndex < 0) {                    // No dot found? Just
+            return newBasename;                     // return basename.
+
+        } else {                                    // Current filename contains at least one dot: Return input string
+            return newBasename +                    // up to and including first dot appending newBasename.
+                filename.substring(firstDotIndex);
         }
     }
 }
\ No newline at end of file
diff --git a/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/HelperArray.java b/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/HelperArray.java
index 299f4e46f7c94416733657344adeadbe34ef31fd..c0a73d531f50061c827124a2642f6b542db620cb 100644
--- a/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/HelperArray.java
+++ b/Klausuren/Sd1/2019summer/Solve/src/main/java/de/hdm_stuttgart/mi/sd1/task1/HelperArray.java
@@ -52,23 +52,20 @@ public class HelperArray {
    */
   static public String[] getAlphabeticalFollowers(final String[] values, final String reference) {
 
-    if (null == values || null == reference) {
-      return new String[] {};
+    if (null == values || null == reference) {                  // Filter special cases returning an empty
+      return new String[] {};                                   // result array.
     } else {
-        final String[] resultBuffer = new String[values.length];
-        int numFollower = 0; // No follower yet found
+      final String[] resultBuffer = new String[values.length];  // Container for collecting results.
+      int numFollower = 0;                                      // No follower yet found
 
-        for (final String s: values) {
-            if (null != s && 0 < s.compareTo(reference)) {
-                resultBuffer[numFollower++] = s;
-            }
-        }
-        if (numFollower < values.length) {
-            // Array containing empty positions, cut off the trash
-            return Arrays.copyOf(resultBuffer, numFollower);
-        } else {
-            return resultBuffer;
-        }
+      for (final String s: values) {                            // Search all non-null input[] values for alphabetical
+        if (null != s && 0 < s.compareTo(reference)) {          // followers with respect to reference and append
+          resultBuffer[numFollower++] = s;                      // them to resultBuffer[] each time incrementing
+        }                                                       // numFollower.
+      }
+      return Arrays.copyOf(  // Create result array containing only
+          resultBuffer,      // alphabetical followers
+          numFollower);
 
 
       // Much better: Java stream solution, subject in «Software Development 2»
@@ -103,15 +100,18 @@ public class HelperArray {
    */
   static public int[] getLeaders(final int[] values) {
 
-    final int[] candidates = new int[values.length]; // Maximum possible length.
-    int currentLeaderIndex = values.length - 1;
-    candidates[currentLeaderIndex] = values[currentLeaderIndex];
+    final int[] candidates = new int[values.length];             // Maximum possible length.
+    int currentLeaderIndex = values.length - 1;                  // Rightmost element is
+    candidates[currentLeaderIndex] = values[currentLeaderIndex]; // always leader.
 
-    for (int i = values.length - 2; 0 <= i; i--) {
-      if (candidates[currentLeaderIndex] <= values[i]){
-        candidates[--currentLeaderIndex] = values[i];
+    for (int i = values.length - 2; 0 <= i; i--) {               // Search values[] for further
+      if (candidates[currentLeaderIndex] <= values[i]){          // leader elements and copy those
+        candidates[--currentLeaderIndex] = values[i];            // into candidates[].
       }
     }
-    return Arrays.copyOfRange(candidates, currentLeaderIndex, values.length);
+    return Arrays.copyOfRange(     // Create result array from «lower» part
+        candidates,                // of candidates[] containing at least one leader.
+        currentLeaderIndex,
+        values.length);
   }
 }
\ No newline at end of file