diff --git a/vala.html.markdown b/vala.html.markdown
index c091da05..7cc59670 100755
--- a/vala.html.markdown
+++ b/vala.html.markdown
@@ -99,6 +99,75 @@ uint8[] chars = "test message".data;
chars.move(5, 0, 7);
print ((string) chars); // Casts the array to a string and prints "message"
+/* Control Flow */
+
+var a = 1;
+var b = 2;
+int[] foreach_demo = {2, 4, 6, 8};
+
+while (b > a) { // While loop; checks if expression is true before executing
+ b--;
+}
+
+do {
+ b--;
+}
+while (b > a); // Do While loop; executes the code in "do" before while (b > a)
+
+for (a = 0; a < 10; a++) { stdout.printf("%d\n", a); } // for loop
+
+foreach (int foreach_demo_var in foreach_demo) {
+ stdout.printf("%d\n", foreach_demo_var);
+} // foreach works on any iterable collection
+
+if (a == 0) {
+ break;
+} else if (a > 1) {
+ stdout.printf("%d\n", a);
+} else {
+ break;
+} // if-then-else
+
+switch (a) {
+ case 1:
+ stdout.printf("A is 1\n");
+ break;
+ case 5:
+ case 10:
+ stdout.printf("A is 5 or 10\n");
+ break;
+ default:
+ stdout.printf("???\n")
+ break;
+} // switch statement
+
+/* Reference Types */
+
+// Reference types are classes.
+
+class Message : GLib.Object { // Class Message extends GLib's Object
+ public string sender; // a public field
+ public string text {get; set;} // a public property
+ private bool sent = false; // private field
+ public void send() { // public method
+ sent = true;
+ }
+
+}
+
+int cast_to_float = 10;
+float casted_float = (float) cast_to_float; // static casting; no runtime checks
+
+// For runtime checks, use dynamic casting.
+// Dynamically casted objects must meet the following:
+// - Object's class is the same class as the desired type
+// - Object's class is a subclass of the desired type
+// - Desired class is an interface implemented by the object's class
+
+float dyna_casted_float = cast_to_float as float // Won't compile
+
+var inferred_string = "hello"; // Type inference
+
struct Closet {
public uint shirts;
public uint jackets;