diff --git a/src/test/examples/shaking2/SubClass1.java b/src/test/examples/shaking2/SubClass1.java
new file mode 100644
index 0000000..722c6e0
--- /dev/null
+++ b/src/test/examples/shaking2/SubClass1.java
@@ -0,0 +1,92 @@
+// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package shaking2;
+
+public class SubClass1 extends SuperClass {
+  private int used;
+  private int alsoUsed;
+  private boolean usedBoolean;
+  private byte usedByte;
+  private char usedChar;
+  private Object usedObject;
+  private short usedShort;
+  private double usedDouble;
+
+  private int unused;
+
+  public SubClass1(int used) {
+    this.used = used;
+  }
+
+  public SubClass1(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    this.used = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
+  }
+
+  @Override
+  public void virtualMethod() {
+    System.out.println("SubClass1::virtualMethod");
+  }
+
+  @Override
+  public void virtualMethod2(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    System.out.println("SubClass1::virtualMethod2 " + (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8));
+  }
+
+  @Override
+  public void virtualMethod3() {
+    super.virtualMethod3();
+    System.out.println("SubClass1::virtualMethod3");
+  }
+
+  @Override
+  public void virtualMethod4(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    super.virtualMethod4(a1, a2, a3, a4, a5, a6, a7, a8);
+    System.out.println("SubClass1::virtualMethod4 " + (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8));
+  }
+
+  @Override
+  public void unusedVirtualMethod() {
+    System.out.println("SubClass1::unusedVirtualMethod");
+  }
+
+  @Override
+  public void interfaceMethod() {
+    System.out.println("SubClass1::interfaceMethod");
+  }
+
+  @Override
+  public void interfaceMethod2() {
+    System.out.println("SubClass1::interfaceMethod2");
+  }
+
+  @Override
+  public void interfaceMethod3() {
+    System.out.println("SubClass1::interfaceMethod3");
+  }
+
+  @Override
+  public void interfaceMethod4() {
+    System.out.println("SubClass1::interfaceMethod4");
+  }
+
+  @Override
+  public void interfaceMethod5(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    System.out.println("SubClass1::interfaceMethod5 " + (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8));
+  }
+
+  @Override
+  public void accessFields() {
+    super.accessFields();
+    System.out.println("SubClass1::fields: " + used + " " + alsoUsed + " " + usedBoolean +
+        " " + usedByte + " " + usedChar + " " + usedObject + " " + usedShort + " " + usedDouble);
+    used = 1;
+    alsoUsed = 2;
+    usedBoolean = true;
+    usedByte = 3;
+    usedChar = '?';
+    usedObject = new Object();
+    usedShort = 4;
+    usedDouble = 42.42;
+  }
+}
