diff --git a/Client/Cargo.lock b/Client/Cargo.lock
new file mode 100644
index 0000000000000000000000000000000000000000..03c1e8a6b38945905abdd459215a129ce8bd5f45
--- /dev/null
+++ b/Client/Cargo.lock
@@ -0,0 +1,358 @@
+[[package]]
+name = "D7018E_Embedded_CoAp_client"
+version = "0.1.0"
+dependencies = [
+ "coap 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bincode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "byteorder 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bitflags"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "byteorder"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bytes"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "coap"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bincode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "enum_primitive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "mio"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miow 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nix 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "miow"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "nix"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num_cpus"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "slab"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "threadpool"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "time"
+version = "0.1.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "url"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "uuid"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[metadata]
+"checksum bincode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "951498c868b0683e1ba67afcdd6b1c3def08a713e66197aa17be8fad56cbaab5"
+"checksum bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dead7461c1127cf637931a1e50934eb6eee8bff2f74433ac7909e9afcee04a3"
+"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
+"checksum byteorder 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "29b2aa490a8f546381308d68fc79e6bd753cd3ad839f7a7172897f1feedfa175"
+"checksum bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c129aff112dcc562970abb69e2508b40850dd24c274761bb50fb8a0067ba6c27"
+"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
+"checksum coap 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "24c47dfbaf87a9a060aaa412b4af7852f512737f7bea3db50efcf035bb937e8f"
+"checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
+"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159"
+"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)" = "36fbc8a8929c632868295d0178dd8f63fc423fd7537ad0738372bd010b3ac9b0"
+"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+"checksum log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a89a0c46ba789b8a247d4c567aed4d7c68e624672d238b45cc3ec20dc9f940"
+"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
+"checksum mio 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a637d1ca14eacae06296a008fa7ad955347e34efcb5891cfd8ba05491a37907e"
+"checksum miow 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3e690c5df6b2f60acd45d56378981e827ff8295562fc8d34f573deb267a59cd1"
+"checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"
+"checksum nix 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bfb3ddedaa14746434a02041940495bf11325c22f6d36125d3bdd56090d50a79"
+"checksum num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cc4083e14b542ea3eb9b5f33ff48bd373a92d78687e74f4cc0a30caeb754f0ca"
+"checksum num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "bdc1494b5912f088f260b775799468d9b9209ac60885d8186a547a0476289e23"
+"checksum num-complex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "58de7b4bf7cf5dbecb635a5797d489864eadd03b107930cbccf9e0fd7428b47c"
+"checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"
+"checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"
+"checksum num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "0c7cb72a95250d8a370105c828f388932373e0e94414919891a0f945222310fe"
+"checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070"
+"checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"
+"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd"
+"checksum redox_syscall 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "ab105df655884ede59d45b7070c8a65002d921461ee813a024558ca16030eea0"
+"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+"checksum slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d807fd58c4181bbabed77cb3b891ba9748241a552bcc5be698faaebefc54f46e"
+"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
+"checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520"
+"checksum url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)" = "cbaa8377a162d88e7d15db0cf110c8523453edcbc5bc66d2b6fffccffa34a068"
+"checksum uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "78c590b5bd79ed10aad8fb75f078a59d8db445af6c743e55c4a53227fc01c13f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
diff --git a/Client/Cargo.toml b/Client/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..f5fd1251817423cd7f61c16e2803cdeee3e89b87
--- /dev/null
+++ b/Client/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "D7018E_Embedded_CoAp_client"
+version = "0.1.0"
+authors = ["Joakim Lundberg <joakim@joakimlundberg.com>"]
+
+[dependencies]
+coap = "0.5"
\ No newline at end of file
diff --git a/Client/src/main.rs b/Client/src/main.rs
new file mode 100644
index 0000000000000000000000000000000000000000..98e1b0df836394e5bee1a668c924c27b75924de9
--- /dev/null
+++ b/Client/src/main.rs
@@ -0,0 +1,79 @@
+// CoAP CLient
+// D7018E - Embedded rust
+// Joakim Lundberg <joakim@joakimlundberg.com>
+
+// Externally used crates
+extern crate coap;
+
+use std::io::ErrorKind;
+use coap::{CoAPClient, CoAPRequest, IsMessage, MessageType, CoAPOption};
+
+fn main() {
+    println!("Request by GET:");
+    let addr = "127.0.0.1:5683";
+    let endpoint = "test";
+
+    coap_get(addr, endpoint);
+
+    println!("Request by POST:");
+    coap_post(addr, endpoint);
+}
+
+
+fn coap_get(address: &str, endpoint: &str) {
+
+    let client = CoAPClient::new(address).unwrap();
+    let mut request = CoAPRequest::new();
+    request.set_version(1);
+    request.set_type(MessageType::Confirmable);
+    request.set_code("0.01");
+    request.set_message_id(1);
+    request.set_token(vec![0x51, 0x55, 0x77, 0xE8]);
+    request.add_option(CoAPOption::UriPath, endpoint.to_string().into_bytes());
+    client.send(&request).unwrap();
+    println!("Client request: coap://{}/{}", address, endpoint);
+
+    match client.receive() {
+        Ok(response) => {
+            println!("Server reply: {}",
+                     String::from_utf8(response.message.payload).unwrap());
+        }
+        Err(e) => {
+            match e.kind() {
+                ErrorKind::WouldBlock => println!("Request timeout"),   // Unix
+                ErrorKind::TimedOut => println!("Request timeout"),     // Windows
+                _ => println!("Request error: {:?}", e),
+            }
+        }
+    }
+}
+
+fn coap_post(address: &str, endpoint: &str) {
+
+    let client = CoAPClient::new(address).unwrap();
+    let mut request = CoAPRequest::new();
+    request.set_version(1);
+    request.set_type(MessageType::Confirmable);
+    request.set_code("0.02");
+    request.set_message_id(1);
+    request.set_token(vec![0x51, 0x55, 0x77, 0xE8]);
+    request.add_option(CoAPOption::UriPath, endpoint.to_string().into_bytes());
+    request.set_payload(b"data".to_vec());
+
+    client.send(&request).unwrap();
+    println!("Client request: coap://{}/{}", address, endpoint);
+
+    match client.receive() {
+        Ok(response) => {
+            println!("Server reply: {}",
+                     String::from_utf8(response.message.payload).unwrap());
+        }
+        Err(e) => {
+            match e.kind() {
+                ErrorKind::WouldBlock => println!("Request timeout"),   // Unix
+                ErrorKind::TimedOut => println!("Request timeout"),     // Windows
+                _ => println!("Request error: {:?}", e),
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Server/Cargo.lock b/Server/Cargo.lock
new file mode 100644
index 0000000000000000000000000000000000000000..a84a481e8dd3a379f0391e937380d382c1d1cfda
--- /dev/null
+++ b/Server/Cargo.lock
@@ -0,0 +1,358 @@
+[[package]]
+name = "D7018E_CoAp_server"
+version = "0.1.0"
+dependencies = [
+ "coap 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bincode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "byteorder 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bitflags"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "byteorder"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bytes"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "coap"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bincode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "enum_primitive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "mio"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miow 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nix 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "miow"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "nix"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-complex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num_cpus"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "slab"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "threadpool"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "time"
+version = "0.1.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "url"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "uuid"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[metadata]
+"checksum bincode 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "951498c868b0683e1ba67afcdd6b1c3def08a713e66197aa17be8fad56cbaab5"
+"checksum bitflags 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dead7461c1127cf637931a1e50934eb6eee8bff2f74433ac7909e9afcee04a3"
+"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
+"checksum byteorder 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "29b2aa490a8f546381308d68fc79e6bd753cd3ad839f7a7172897f1feedfa175"
+"checksum bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c129aff112dcc562970abb69e2508b40850dd24c274761bb50fb8a0067ba6c27"
+"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
+"checksum coap 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "24c47dfbaf87a9a060aaa412b4af7852f512737f7bea3db50efcf035bb937e8f"
+"checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
+"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159"
+"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)" = "36fbc8a8929c632868295d0178dd8f63fc423fd7537ad0738372bd010b3ac9b0"
+"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+"checksum log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a89a0c46ba789b8a247d4c567aed4d7c68e624672d238b45cc3ec20dc9f940"
+"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
+"checksum mio 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a637d1ca14eacae06296a008fa7ad955347e34efcb5891cfd8ba05491a37907e"
+"checksum miow 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3e690c5df6b2f60acd45d56378981e827ff8295562fc8d34f573deb267a59cd1"
+"checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"
+"checksum nix 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bfb3ddedaa14746434a02041940495bf11325c22f6d36125d3bdd56090d50a79"
+"checksum num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cc4083e14b542ea3eb9b5f33ff48bd373a92d78687e74f4cc0a30caeb754f0ca"
+"checksum num-bigint 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "bdc1494b5912f088f260b775799468d9b9209ac60885d8186a547a0476289e23"
+"checksum num-complex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "58de7b4bf7cf5dbecb635a5797d489864eadd03b107930cbccf9e0fd7428b47c"
+"checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"
+"checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"
+"checksum num-rational 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "0c7cb72a95250d8a370105c828f388932373e0e94414919891a0f945222310fe"
+"checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070"
+"checksum num_cpus 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"
+"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd"
+"checksum redox_syscall 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "ab105df655884ede59d45b7070c8a65002d921461ee813a024558ca16030eea0"
+"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+"checksum slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d807fd58c4181bbabed77cb3b891ba9748241a552bcc5be698faaebefc54f46e"
+"checksum threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865"
+"checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520"
+"checksum url 0.2.38 (registry+https://github.com/rust-lang/crates.io-index)" = "cbaa8377a162d88e7d15db0cf110c8523453edcbc5bc66d2b6fffccffa34a068"
+"checksum uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "78c590b5bd79ed10aad8fb75f078a59d8db445af6c743e55c4a53227fc01c13f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
diff --git a/Server/Cargo.toml b/Server/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..e178afb295219df8b49e402d2b1429cd0bd8c8ea
--- /dev/null
+++ b/Server/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "D7018E_CoAp_server"
+version = "0.1.0"
+authors = ["Joakim Lundberg <joakim@joakimlundberg.com>"]
+
+[dependencies]
+coap = "0.5"
\ No newline at end of file
diff --git a/Server/src/main.rs b/Server/src/main.rs
new file mode 100644
index 0000000000000000000000000000000000000000..ebfe6e22cce263e5cf0025105417dde51d3a818c
--- /dev/null
+++ b/Server/src/main.rs
@@ -0,0 +1,47 @@
+// CoAP Server
+// D7018E - Embedded rust
+// Joakim Lundberg <joakim@joakimlundberg.com>
+
+extern crate coap;
+
+use std::io;
+use coap::{CoAPServer, CoAPResponse, CoAPRequest, IsMessage};
+
+fn request_handler(request: CoAPRequest) -> Option<CoAPResponse> {
+	let request_code = request.get_code();
+
+	match request_code.as_ref() {
+		"0.01" => {
+			println!("request by get");
+		},
+		"0.02" => {
+			println!("request by post");
+			println!("request body: {}", String::from_utf8(request.message.payload).unwrap());
+		},
+		_ => {
+			println!("request by other method {}", request_code);
+		}
+	};
+
+	return match request.response {
+		Some(mut message) => {
+			message.set_payload(b"OK".to_vec());
+			Some(message)
+		},
+		_ => None
+	};
+}
+
+fn main() {
+    let addr = "127.0.0.1:5683";
+
+    let mut server = CoAPServer::new(addr).unwrap();
+    server.handle(request_handler).unwrap();
+
+    println!("Server up on {}", addr);
+    println!("Press any key to stop...");
+
+    io::stdin().read_line(&mut String::new()).unwrap();
+
+    println!("Server shutdown");
+}
\ No newline at end of file
diff --git a/course_description/LTU_logo.png b/course_description/LTU_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..dddc5213ac5959727b7a41616b1df8a93385ff25
Binary files /dev/null and b/course_description/LTU_logo.png differ
diff --git a/course_description/Sections/Introduction.tex b/course_description/Sections/Introduction.tex
new file mode 100644
index 0000000000000000000000000000000000000000..2e6d400fb557cd9c433c52145f6cc6403c35de6a
--- /dev/null
+++ b/course_description/Sections/Introduction.tex
@@ -0,0 +1,29 @@
+\newpage
+%\setcounter{page}{1}
+\section*{Course description}
+
+To create a wireless embedded hardware bridge using \emph{RUST} to read and collect sensory information through a serial protocol and relay the data via CoAP to a server for filtering and displaying of the data. 
+
+\section*{Relevant information}
+System that will be used is a \emph{Nucleo-64} with an \emph{STM32F401} ARM microcontroller. \\ 
+Some of the crates that might be used are 
+\begin{itemize}
+\item \href{https://crates.io/crates/coap}{coap}
+\item  \href{https://crates.io/crates/smoltcp}{smoltcp}
+\item  \href{https://crates.io/crates/cortex-m}{cortex-m}
+\end{itemize}
+as well as crates and/or code developed by other course participants.
+
+\section*{Grading}
+
+\subsection*{Grade 3}
+Local readout of data and storage on the embedded system.\\
+Embedded system to server communication using CoAP.
+
+\subsection*{Grade 4}
+Create an API-design for talking CoAP with a server along with documentation.\\
+Making the embedded side wireless through use of WiFi communication.
+
+\subsection*{Grade 5}
+Implementing the API designed for CoAP. \\
+Creating examples for the API for CoAP. 
\ No newline at end of file
diff --git a/course_description/logo.jpg b/course_description/logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..caf97de9005a626b57fb49dd6bef84a9b6c92ac5
Binary files /dev/null and b/course_description/logo.jpg differ
diff --git a/course_description/main.tex b/course_description/main.tex
new file mode 100644
index 0000000000000000000000000000000000000000..a88fca34d4732cd3e5d8f3ebe191f6427de6988c
--- /dev/null
+++ b/course_description/main.tex
@@ -0,0 +1,129 @@
+
+\documentclass[12pt,a4paper,english,titlepage,oneside]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[margin=2.5cm]{geometry}
+\usepackage{color}
+\usepackage[english]{babel}
+\usepackage{graphicx}
+\setlength\parindent{0pt}
+\usepackage{makeidx}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{parskip}
+\usepackage{amsthm}
+\usepackage[nottoc,notlot,notlof]{tocbibind}
+\usepackage{url}
+\usepackage{hyperref}
+\newcommand{\rework}[1]{\todo[color=yellow,inline]{#1}}
+\usepackage{epstopdf}
+%\setlength{\parindent}{0cm}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{fancyhdr}
+
+\hypersetup{
+    colorlinks=true,
+    linkcolor=black,
+    filecolor=magenta,      
+    urlcolor=cyan,
+}
+
+
+\pagestyle{fancy}
+\fancyhf{}
+\setlength\headheight{2.5cm} 
+\textheight = 610pt
+
+\renewcommand{\headrulewidth}{1pt}
+\renewcommand{\footrulewidth}{1pt}
+
+\fancyfoot[C]{\textbf{ \thepage}}
+\lhead{Luleå Tekniska Universitet \\D7018E}  
+\rhead{\includegraphics[width=1.8cm]{LTU_logo}}
+
+%\renewcommand{\abstractname}{Sammanfattning}
+%\renewcommand{\contentsname}{Innehållsförteckning}
+%\renewcommand{\tablename}{Tabell}
+%\renewcommand{\figurename}{Figur}
+
+%----------------------------------------------------------------------------------------
+%	TITLE AND AUTHOR
+%----------------------------------------------------------------------------------------
+
+\title{RAPPORT}
+\author{Joakim Lundberg\\ LUNJOK-3 }
+
+\begin{document}
+\begin{titlepage}
+
+\newcommand{\HRule}{\rule{\linewidth}{0.5mm}} % Defines a new command for the horizontal lines, change thickness here
+
+\center % Center everything on the page
+ 
+%----------------------------------------------------------------------------------------
+%	HEADING SECTIONS
+%----------------------------------------------------------------------------------------
+
+\textsc{\huge Luleå Tekniska Universitet}\\[1cm] % Name of your university/college
+\textsc{\large D7018E - Special studies in embedded systems}\\[0.3cm] % Major heading such as course name
+\textsc{\large COURSE SPECIFICATION}\\[0.4cm] % Minor heading such as course title
+
+%----------------------------------------------------------------------------------------
+%	TITLE SECTION
+%----------------------------------------------------------------------------------------
+
+\HRule \\[0.6cm]
+{ \huge \bfseries Embedded hardware bridge}\\[0.25cm] % Title of your document
+\HRule \\[2.5cm]
+
+%----------------------------------------------------------------------------------------
+%	AUTHOR SECTION
+%----------------------------------------------------------------------------------------
+
+
+\begin{minipage}{0.3\textwidth}
+\begin{flushleft} \large
+\emph{}\\
+Joakim Lundberg \\
+\end{flushleft}
+\end{minipage}
+~
+\begin{minipage}{0.38\textwidth}
+\begin{flushleft} \large
+\emph{} \\
+\texttt{891019-8954}
+\end{flushleft}
+\texttt{lunjok-3@student.ltu.se}
+\end{minipage}\\[8.0cm]
+
+%----------------------------------------------------------------------------------------
+%	LOGO SECTION
+%----------------------------------------------------------------------------------------
+
+\includegraphics[scale=0.20]{logo.jpg}\\[0.5cm]
+
+{\large \today}
+\vfill 
+
+\end{titlepage}
+
+%-----------------------------------------------------------------------
+%	Innehållsförteckning, ändra ej.
+%-----------------------------------------------------------------------
+\pagenumbering{gobble}
+%\setlength{\parskip}{12pt}
+%\thispagestyle{empty}
+%\tableofcontents
+
+%-----------------------------------------------------------------------
+%	INCLUDE SECTIONS
+%-----------------------------------------------------------------------
+%\pagenumbering{arabic}
+\input{Sections/Introduction}
+\newpage
+
+\pagestyle{empty}
+\textheight = 630pt
+\setlength\headheight{1pt} 
+
+\end{document}
\ No newline at end of file
diff --git a/course_description/parskip.sty b/course_description/parskip.sty
new file mode 100644
index 0000000000000000000000000000000000000000..c5ca57683499a427154e1cf843f3c37a5b35a312
--- /dev/null
+++ b/course_description/parskip.sty
@@ -0,0 +1,87 @@
+% parskip.sty; last edited by Robin Fairbairns (rf10@cam.ac.uk),
+%              derived from:
+%
+% This is PARSKIP.STY by H.Partl, TU Wien, as of 19 Jan 1989.
+%
+% Package to be used with any document class at any size.
+% It produces the following Paragraph Layout:
+%     Zero Parindent and non-zero Parskip. The stretchable glue in \parskip
+%     helps LaTeX in finding the best place for page breaks.
+%
+% This package is no more than quick fix; the `proper' way to achieve
+% effects as far-reaching as this is to create a new class.  An
+% example class is to be found in the ntgclass set: artikel3.cls
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{parskip}[2001/04/09 non-zero parskip adjustments]
+
+\parskip=0.5\baselineskip \advance\parskip by 0pt plus 2pt
+\parindent=\z@
+     
+%
+% from a suggestion by Donald Arseneau on comp.text.tex:
+
+\DeclareOption{parfill}{\setlength{\parfillskip}{30\p@ \@plus 1fil}}
+\ProcessOptions
+
+% To accompany this, the vertical spacing in the list environments is changed
+% to use the same as \parskip in all relevant places (for normalsize only):
+%   \parsep = \parskip
+%   \itemsep = \z@ % add nothing to \parskip between items
+%   \topsep = \z@ % add nothing to \parskip before first item
+
+\def\@listI{\leftmargin\leftmargini
+   \topsep\z@ \parsep\parskip \itemsep\z@}
+\let\@listi\@listI
+\@listi
+     
+\def\@listii{\leftmargin\leftmarginii
+   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+   \topsep\z@ \parsep\parskip \itemsep\z@}
+     
+\def\@listiii{\leftmargin\leftmarginiii
+    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+    \topsep\z@ \parsep\parskip \itemsep\z@}
+     
+% and, now...
+%   \partopsep = \z@ % don't even add anything before first item (beyond 
+%                    % \parskip) even if the list is preceded by a blank line
+\partopsep=\z@
+ 
+% Note that listiv, listv and listvi don't change vertical parameters.
+
+% deal with a problem raised on comp.text.tex in april 2001
+%
+% don't expand the table of contents any further
+%
+% first: check that the definition of \@starttoc is unchanged from
+% that in latex.ltx
+\@ifundefined{CheckCommand}{}{%
+  \CheckCommand*{\@starttoc}[1]{%
+    \begingroup
+      \makeatletter
+      \@input{\jobname.#1}%
+      \if@filesw
+        \expandafter\newwrite\csname tf@#1\endcsname
+        \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+      \fi
+      \@nobreakfalse
+    \endgroup}}
+%
+% now having generated any warning that might help, redefine
+\renewcommand*{\@starttoc}[1]{%
+  \begingroup
+    \makeatletter
+    \parskip\z@
+    \@input{\jobname.#1}%
+    \if@filesw
+      \expandafter\newwrite\csname tf@#1\endcsname
+      \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+    \fi
+    \@nobreakfalse
+  \endgroup
+}
+
+\endinput
+     
+     
diff --git a/course_description/swedish.ldf b/course_description/swedish.ldf
new file mode 100644
index 0000000000000000000000000000000000000000..c54f211561956d7d50769ddd55a6939083de9cd7
--- /dev/null
+++ b/course_description/swedish.ldf
@@ -0,0 +1,141 @@
+%%
+%% This is file `swedish.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% swedish.dtx  (with options: `code')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright 1989-2001 Johannes L. Braams and any individual authors
+%% listed elsewhere in this file.  All rights reserved.
+%% 
+%% This file is part of the Babel system release 3.7.
+%% --------------------------------------------------
+%% 
+%% It may be distributed under the terms of the LaTeX Project Public
+%% License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.2 or, at your option, any later version.
+\ProvidesLanguage{swedish}
+        [2001/03/12 v2.3c Swedish support from the babel system]
+%% File `swedish.dtx'
+%% Babel package for LaTeX version 2e
+%% Copyright (C) 1989 - 2001
+%%           by Johannes Braams, TeXniek
+%% Please report errors to: J.L. Braams
+%%                          babel@braams.cistron.nl
+\LdfInit{swedish}\captionsswedish
+\ifx\l@swedish\@undefined
+    \@nopatterns{Swedish}
+    \adddialect\l@swedish0\fi
+\addto\captionsswedish{%
+  \def\prefacename{F\"orord}%
+  \def\refname{Referenser}%
+  \def\abstractname{Sammanfattning}%
+  \def\bibname{Litteraturf\"orteckning}%
+  \def\chaptername{Kapitel}%
+  \def\appendixname{Bilaga}%
+  \def\contentsname{Inneh\csname aa\endcsname ll}%
+  \def\listfigurename{Figurer}%
+  \def\listtablename{Tabeller}%
+  \def\indexname{Sakregister}%
+  \def\figurename{Figur}%
+  \def\tablename{Tabell}%
+  \def\partname{Del}%
+  \def\enclname{Bil.}%
+  \def\ccname{Kopia f\"or k\"annedom}%
+  \def\headtoname{Till}% in letter
+  \def\pagename{Sida}%
+  \def\seename{se}%
+  \def\alsoname{se \"aven}%
+  \def\proofname{Bevis}%
+  \def\glossaryname{Ordlista}%
+  }%
+\def\dateswedish{%
+  \def\today{%
+    \number\day~\ifcase\month\or
+    januari\or februari\or mars\or april\or maj\or juni\or
+    juli\or augusti\or september\or oktober\or november\or
+    december\fi
+    \space\number\year}}
+\def\datesymd{%
+  \def\today{\number\year-\two@digits\month-\two@digits\day}%
+  }
+\def\datesdmy{%
+  \def\today{\number\day/\number\month\space\number\year}%
+  }
+\providehyphenmins{swedish}{\tw@\tw@}
+\addto\extrasswedish{\bbl@frenchspacing}
+\addto\noextrasswedish{\bbl@nonfrenchspacing}
+\initiate@active@char{"}
+\addto\extrasswedish{\languageshorthands{swedish}}
+\addto\extrasswedish{\bbl@activate{"}}
+\addto\noextrasswedish{\bbl@deactivate{"}}
+\addto\extrasswedish{\babel@save\"\umlautlow}
+\addto\noextrasswedish{\umlauthigh}
+\begingroup \catcode`\"12
+\def\x{\endgroup
+  \def\@SS{\mathchar"7019 }
+  \def\dq{"}}
+\x
+\declare@shorthand{swedish}{"w}{\textormath{{\aa}\allowhyphens}{\ddot w}}
+\declare@shorthand{swedish}{"a}{\textormath{\"{a}\allowhyphens}{\ddot a}}
+\declare@shorthand{swedish}{"o}{\textormath{\"{o}\allowhyphens}{\ddot o}}
+\declare@shorthand{swedish}{"W}{\textormath{{\AA}\allowhyphens}{\ddot W}}
+\declare@shorthand{swedish}{"A}{\textormath{\"{A}\allowhyphens}{\ddot A}}
+\declare@shorthand{swedish}{"O}{\textormath{\"{O}\allowhyphens}{\ddot O}}
+\declare@shorthand{swedish}{"b}{\textormath{\bbl@disc b{bb}}{b}}
+\declare@shorthand{swedish}{"B}{\textormath{\bbl@disc B{BB}}{B}}
+\declare@shorthand{swedish}{"d}{\textormath{\bbl@disc d{dd}}{d}}
+\declare@shorthand{swedish}{"D}{\textormath{\bbl@disc D{DD}}{D}}
+\declare@shorthand{swedish}{"f}{\textormath{\bbl@disc f{ff}}{f}}
+\declare@shorthand{swedish}{"F}{\textormath{\bbl@disc F{FF}}{F}}
+\declare@shorthand{swedish}{"g}{\textormath{\bbl@disc g{gg}}{g}}
+\declare@shorthand{swedish}{"G}{\textormath{\bbl@disc G{GG}}{G}}
+\declare@shorthand{swedish}{"l}{\textormath{\bbl@disc l{ll}}{l}}
+\declare@shorthand{swedish}{"L}{\textormath{\bbl@disc L{LL}}{L}}
+\declare@shorthand{swedish}{"m}{\textormath{\bbl@disc m{mm}}{m}}
+\declare@shorthand{swedish}{"M}{\textormath{\bbl@disc M{MM}}{M}}
+\declare@shorthand{swedish}{"n}{\textormath{\bbl@disc n{nn}}{n}}
+\declare@shorthand{swedish}{"N}{\textormath{\bbl@disc N{NN}}{N}}
+\declare@shorthand{swedish}{"p}{\textormath{\bbl@disc p{pp}}{p}}
+\declare@shorthand{swedish}{"P}{\textormath{\bbl@disc P{PP}}{P}}
+\declare@shorthand{swedish}{"r}{\textormath{\bbl@disc r{rr}}{r}}
+\declare@shorthand{swedish}{"R}{\textormath{\bbl@disc R{RR}}{R}}
+\declare@shorthand{swedish}{"s}{\textormath{\bbl@disc s{ss}}{s}}
+\declare@shorthand{swedish}{"S}{\textormath{\bbl@disc S{SS}}{S}}
+\declare@shorthand{swedish}{"t}{\textormath{\bbl@disc t{tt}}{t}}
+\declare@shorthand{swedish}{"T}{\textormath{\bbl@disc T{TT}}{T}}
+\declare@shorthand{swedish}{"-}{\nobreak-\bbl@allowhyphens}
+\declare@shorthand{swedish}{"|}{%
+  \textormath{\nobreak\discretionary{-}{}{\kern.03em}%
+              \bbl@allowhyphens}{}}
+\declare@shorthand{swedish}{""}{\hskip\z@skip}
+\declare@shorthand{swedish}{"~}{%
+  \textormath{\leavevmode\hbox{-}\bbl@allowhyphens}{-}}
+\declare@shorthand{swedish}{"=}{\hbox{-}\allowhyphens}
+\addto\extrasswedish{\babel@save\-}
+\addto\extrasswedish{\def\-{\allowhyphens
+                          \discretionary{-}{}{}\allowhyphens}}
+\ldf@finish{swedish}
+%%
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
+%%
+\endinput
+%%
+%% End of file `swedish.ldf'.
\ No newline at end of file
diff --git a/course_description/tocbibind.sty b/course_description/tocbibind.sty
new file mode 100644
index 0000000000000000000000000000000000000000..b88f54f43e373bc1d615df513e852cc3147b2c0c
--- /dev/null
+++ b/course_description/tocbibind.sty
@@ -0,0 +1,320 @@
+%%
+%% This is file `tocbibind.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tocbibind.dtx  (with options: `usc')
+%% 
+%% -----------------------------------------------------------------
+%%   Author: Peter Wilson, Herries Press
+%%   Maintainer: Will Robertson (will dot robertson at latex-project dot org)
+%%   Copyright 1998--2004 Peter R. Wilson
+%% 
+%%   This work may be distributed and/or modified under the
+%%   conditions of the LaTeX Project Public License, either
+%%   version 1.3c of this license or (at your option) any
+%%   later version: <http://www.latex-project.org/lppl.txt>
+%% 
+%%   This work has the LPPL maintenance status "maintained".
+%%   The Current Maintainer of this work is Will Robertson.
+%% 
+%%   This work consists of the files listed in the README file.
+%% -----------------------------------------------------------------
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tocbibind}[2010/10/13 v1.5k extra ToC listings]
+\providecommand{\PRWPackageNote}[2]{%
+  \GenericWarning{%
+    (#1)\@spaces\@spaces\@spaces\@spaces
+  }{%
+    Package #1 Note: #2%
+   }%
+}
+\providecommand{\PRWPackageNoteNoLine}[2]{%
+  \PRWPackageNote{#1}{#2\@gobble}%
+}
+
+\newcommand{\@bibquit}{}
+\newif\if@bibchapter
+\@ifundefined{chapter}{%
+  \@bibchapterfalse
+  \@ifundefined{section}{%
+    \PackageWarning{tocbibind}%
+      {I don't recognize any sectional divisions.\MessageBreak
+       I hope you have used the `other' option\MessageBreak
+       otherwise I'll ignore the package}
+    \renewcommand{\@bibquit}{\endinput}
+    }{\PackageInfo{tocbibind}{The document has section divisions}}
+  }{\@bibchaptertrue
+    \PackageInfo{tocbibind}{The document has chapter divisions}}
+
+\newif\if@inltxdoc
+\@ifclassloaded{ltxdoc}{\@inltxdoctrue}{\@inltxdocfalse}
+
+\newif\if@dotocbib\@dotocbibtrue
+\newif\if@dotocind\@dotocindtrue
+\newif\if@dotoctoc\@dotoctoctrue
+\newif\if@dotoclot\@dotoclottrue
+\newif\if@dotoclof\@dotocloftrue
+
+\newif\if@donumbib\@donumbibfalse
+\newif\if@donumindex\@donumindexfalse
+\newif\if@dot@cb@bsection\@dot@cb@bsectionfalse
+
+\DeclareOption{section}{\@bibchapterfalse}
+\DeclareOption{notbib}{\@dotocbibfalse}
+\DeclareOption{notindex}{\@dotocindfalse}
+\DeclareOption{nottoc}{\@dotoctocfalse}
+\DeclareOption{notlot}{\@dotoclotfalse}
+\DeclareOption{notlof}{\@dotocloffalse}
+\DeclareOption{numbib}{\@donumbibtrue}
+\DeclareOption{numindex}{\@donumindextrue}
+
+\DeclareOption{chapter}{%
+  \if@bibchapter\else
+    \PackageWarning{tocbibind}%
+                   {Chapters are undefined, using section instead}
+  \fi}
+
+\DeclareOption{other}{\renewcommand{\@bibquit}{}
+                      \@bibchapterfalse}
+\DeclareOption{none}{%
+  \@dotocbibfalse
+  \@dotocindfalse
+  \@dotoctocfalse
+  \@dotoclotfalse
+  \@dotocloffalse
+  \@donumbibfalse
+  \@donumindexfalse
+}
+\ProcessOptions\relax
+\@bibquit
+
+\if@bibchapter
+  \PRWPackageNoteNoLine{tocbibind}{Using chapter style headings, unless overridden}
+\else
+  \PRWPackageNoteNoLine{tocbibind}{Using section or other style headings}
+\fi
+\if@inltxdoc \@dotocindfalse \fi
+
+\newcommand{\@tocextra}{section}
+\newcommand{\tocotherhead}[1]{\renewcommand{\@tocextra}{#1}}
+
+\newcommand{\tocetcmark}[1]{%
+  \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
+\newcommand{\prw@mkboth}[1]{\tocetcmark{#1}}
+\newcommand{\toc@section}[2]{%
+  \@nameuse{#1}*{#2\prw@mkboth{#2}}
+  \addcontentsline{toc}{#1}{#2}}
+\newcommand{\toc@headstar}[2]{%
+  \@nameuse{#1}*{{#2}}}
+\newcommand{\toc@chapter}[1]{%
+  \chapter*{#1}\prw@mkboth{#1}
+  \addcontentsline{toc}{chapter}{#1}}
+\ifx\bibname\undefined
+  \ifx\refname\undefined
+    \newcommand{\tocbibname}{References}
+  \else
+    \newcommand{\tocbibname}{\refname}
+  \fi
+\else
+  \newcommand{\tocbibname}{\bibname}
+\fi
+\providecommand{\indexname}{Index}
+\newcommand{\setindexname}[1]{\renewcommand{\indexname}{#1}}
+\providecommand{\contentsname}{Contents}
+\newcommand{\settocname}[1]{\renewcommand{\contentsname}{#1}}
+\providecommand{\listtablename}{List of Tables}
+\newcommand{\setlotname}[1]{\renewcommand{\listtablename}{#1}}
+\providecommand{\listfigurename}{List of Figures}
+\newcommand{\setlofname}[1]{\renewcommand{\listfigurename}{#1}}
+\newcommand{\settocbibname}[1]{\renewcommand{\tocbibname}{#1}}
+\newcommand{\t@cb@bchapsec}{%
+  \if@bibchapter
+    \if@donumbib
+      \chapter{\tocbibname}%
+    \else
+      \toc@chapter{\tocbibname}%
+    \fi
+  \else
+    \if@donumbib
+      \@nameuse{\@tocextra}{\tocbibname}%
+    \else
+      \toc@section{\@tocextra}{\tocbibname}%
+    \fi
+  \fi}
+\newcommand{\t@cb@bsection}{%
+  \if@donumbib
+    \@nameuse{\@tocextra}{\tocbibname}%
+  \else
+    \toc@section{\@tocextra}{\tocbibname}%
+  \fi}
+
+\if@dotocbib
+  \@ifpackageloaded{natbib}{}{% natbib not loaded
+    \newcommand{\bibsection}{\t@cb@bchapsec}
+    \renewenvironment{thebibliography}[1]{%
+      \bibsection
+      \begin{thebibitemlist}{#1}}{\end{thebibitemlist}}}
+  \newenvironment{thebibitemlist}[1]{
+    \list{\@biblabel{\@arabic\c@enumiv}}%
+         {\settowidth\labelwidth{\@biblabel{#1}}%
+          \leftmargin\labelwidth
+          \advance\leftmargin\labelsep
+          \@openbib@code
+          \usecounter{enumiv}%
+          \let\p@enumiv\@empty
+          \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+    \sloppy
+    \clubpenalty4000
+    \@clubpenalty \clubpenalty
+    \widowpenalty4000%
+    \sfcode`\.\@m}
+   {\def\@noitemerr
+     {\@latex@warning{Empty `thebibliography' environment}}%
+     \endlist}
+
+  \@ifpackagewith{chapterbib}{sectionbib}%
+    {\renewcommand{\sectionbib}[2]{}}%
+    {}
+
+\fi
+
+\AtBeginDocument{%
+  \@ifpackagewith{natbib}{sectionbib}{\@dot@cb@bsectiontrue}{}
+  \@ifpackagewith{chapterbib}{sectionbib}%
+    {\@dot@cb@bsectiontrue
+     \@ifundefined{sectionbib}{}{\def\sectionbib#1#2{}}}%
+    {}
+
+  \if@dotocbib
+    \if@dot@cb@bsection
+      \renewcommand{\bibsection}{\t@cb@bsection}%
+    \else
+      \renewcommand{\bibsection}{\t@cb@bchapsec}%
+    \fi
+  \fi
+}
+
+\if@inltxdoc\else
+  \renewenvironment{theindex}%
+    {\if@twocolumn
+       \@restonecolfalse
+     \else
+       \@restonecoltrue
+     \fi
+     \if@bibchapter
+        \if@donumindex
+          \refstepcounter{chapter}
+          \twocolumn[\vspace*{2\topskip}%
+                     \@makechapterhead{\indexname}]%
+          \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}\indexname}
+          \chaptermark{\indexname}
+        \else
+          \if@dotocind
+            \twocolumn[\vspace*{2\topskip}%
+                       \@makeschapterhead{\indexname}]%
+            \prw@mkboth{\indexname}
+            \addcontentsline{toc}{chapter}{\indexname}
+          \else
+            \twocolumn[\vspace*{2\topskip}%
+                       \@makeschapterhead{\indexname}]%
+            \prw@mkboth{\indexname}
+          \fi
+        \fi
+     \else
+        \if@donumindex
+          \twocolumn[\vspace*{-1.5\topskip}%
+                     \@nameuse{\@tocextra}{\indexname}]%
+          \csname \@tocextra mark\endcsname{\indexname}
+        \else
+          \if@dotocind
+            \twocolumn[\vspace*{-1.5\topskip}%
+                       \toc@headstar{\@tocextra}{\indexname}]%
+            \prw@mkboth{\indexname}
+            \addcontentsline{toc}{\@tocextra}{\indexname}
+          \else
+            \twocolumn[\vspace*{-1.5\topskip}%
+                       \toc@headstar{\@tocextra}{\indexname}]%
+            \prw@mkboth{\indexname}
+          \fi
+        \fi
+     \fi
+   \thispagestyle{plain}\parindent\z@
+   \parskip\z@ \@plus .3\p@\relax
+   \let\item\@idxitem}
+   {\if@restonecol\onecolumn\else\clearpage\fi}
+\fi
+
+\newcommand{\toc@start}{%
+  \if@bibchapter
+    \if@twocolumn
+      \@restonecoltrue\onecolumn
+    \else
+      \@restonecolfalse
+    \fi
+  \fi}
+
+\newcommand{\toc@finish}{%
+  \if@bibchapter
+    \if@restonecol\twocolumn\fi
+  \fi}
+\newcommand{\tocfile}[2]{%
+  \toc@start
+  \if@bibchapter
+    \toc@chapter{#1}
+  \else
+    \toc@section{\@tocextra}{#1}
+  \fi
+  \@starttoc{#2}
+  \toc@finish}
+
+\if@dotoctoc
+  \renewcommand{\tableofcontents}{%
+    \tocfile{\contentsname}{toc}
+  }
+\fi
+
+\if@dotoclot
+  \renewcommand{\listoftables}{%
+    \tocfile{\listtablename}{lot}
+  }
+\fi
+
+\if@dotoclof
+  \renewcommand{\listoffigures}{%
+    \tocfile{\listfigurename}{lof}
+  }
+\fi
+
+\newcommand{\simplechapter}[1][\@empty]{%
+  \let\@tbiold@makechapterhead\@makechapterhead
+  \renewcommand{\@makechapterhead}[1]{%
+    \vspace*{50\p@}%
+    {\parindent \z@ \raggedright
+     \normalfont
+     \interlinepenalty\@M
+     \Huge\bfseries #1\space\thechapter\simplechapterdelim\space
+        ##1\par\nobreak
+     \vskip 40\p@
+   }}
+}
+\newcommand{\restorechapter}{%
+  \@ifundefined{@tbiold@makechapterhead}{}%
+  {\let\@makechapterhead\@tbiold@makechapterhead}
+}
+\newcommand{\simplechapterdelim}{}
+
+\newcommand{\tocchapter}{%
+  \providecommand{\@makechapterhead}{}
+  \simplechapter
+  \renewcommand{\toc@chapter}[1]{\chapter{##1}}
+}
+\newcommand{\tocsection}{%
+  \renewcommand{\toc@section}[2]{\@nameuse{##1}{##2}}
+}
+
+\endinput
+%%
+%% End of file `tocbibind.sty'.
diff --git a/course_description/wrapfig.sty b/course_description/wrapfig.sty
new file mode 100644
index 0000000000000000000000000000000000000000..ea85e1b0d40a11bb6fa8fd558a706164bca85f70
--- /dev/null
+++ b/course_description/wrapfig.sty
@@ -0,0 +1,598 @@
+%  W R A P F I G . S T Y    ver 3.6  (Jan 31, 2003)
+%
+%  Copyright (C) 1991-2003   by Donald Arseneau   <asnd@triumf.ca>
+%  This software is released under the terms of the LaTeX Project 
+%  public license.
+%
+%  Environments "wrapfigure" and "wraptable" place a figure or table
+%  at the side of the page and wrap text around it.
+%
+%  \begin{wrapfigure}[12]{r}[34pt]{5cm} <figure> \end{wrapfigure}
+%                     --  -  ----  ---
+%  [number of narrow lines] {placement} [overhang] {width of figure}
+%
+%  Placement is one of   r, l, i, o, R, L, I, O,  for right, left,
+%  inside, outside, (here / FLOAT).
+%  The figure sticks into the margin by `overhang', if given, or by the
+%  length \wrapoverhang, which is normally zero.
+%  The number of wrapped text lines is normally calculated from the height
+%  of the figure, but may be specified manually ("12" above).
+% 
+%  Environments similar to "wrapfigure" and "wraptable" may be easily added,
+%  or invoked by "\begin{wrapfloat}{float_name}"
+%
+%  More detailed instructions are given below, following the definitions.
+%  Please direct any problem reports to asnd@triumf.ca
+
+%%%%%  ----- Begin definitions ----- %%%%%
+
+\@ifundefined{c@WF@wrappedlines}{}{\endinput}
+
+\newdimen\wrapoverhang \wrapoverhang\z@
+\newdimen\WF@size
+\newcount\c@WF@wrappedlines % used globally
+\newbox\WF@box
+\newtoks\WF@everypar
+\newif\ifWF@float
+\let\@@parshape\parshape
+\let\WF@@everypar\everypar
+
+\def\wrapfloat#1{\def\@captype{#1}\@ifnextchar[\WF@wr{\WF@wr[]}}
+
+\def\wrapfigure{\wrapfloat{figure}}
+\def\wraptable{\wrapfloat{table}}
+
+\def\WF@wr[#1]#2{% first two args: #1=num lines, #2=placement
+  \xdef\WF@wfname{wrap\@captype\space}%
+  \ifvoid\WF@box\else \WFclear \WF@collision \fi
+  \xdef\WF@place{\string`\@car#2r\@nil}%
+  \ifnum\lccode\WF@place=\WF@place \global\WF@floatfalse
+    \else \global\WF@floattrue \fi
+  \ifx\parshape\WF@fudgeparshape \ifWF@float\else\WF@collision\fi \else
+   \ifx\par\@@par \ifnum\@@parshape>\z@\WF@conflict\fi \else \WF@conflict\fi
+  \fi \gdef\WF@wli{#1}%
+  \@ifnextchar[\WF@rapt{\WF@rapt[\wrapoverhang]}}
+
+\def\WF@rapt[#1]#2{% final two args: #1 = overhang,  #2 = width,
+  \gdef\WF@ovh{#1}% hold overhang for later, when \width is known
+  \global\setbox\WF@box\vtop\bgroup \setlength\hsize{#2}%
+  \ifdim\hsize>\z@ \@parboxrestore \else 
+  \setbox\z@\hbox\bgroup \let\wf@@caption\caption \let\caption\wf@caption 
+  \ignorespaces \fi}
+
+\def\wf@caption{\relax
+  \ifdim\hsize>\z@ \let\caption\wf@@caption \else
+  \unskip \egroup \hsize\wd\z@ \@parboxrestore \box\z@ \fi \caption}
+
+\def\endwrapfloat{%
+  \ifdim\hsize>\z@ \par\hrule\@width\hsize\@height\z@ % force width
+  \else \unskip \egroup \box\z@ \fi % or end hbox
+  \egroup % end the \vtop; width is known so now is "later"
+  \WF@floatstyhook % support float.sty
+  \def\width{\wd\WF@box}\setlength\wrapoverhang{\WF@ovh}%
+  \xdef\WF@ovh{\the\wrapoverhang}% save until wrapping
+  \ifdim\ht\WF@box>\topskip \ht\WF@box\z@ \fi % too much height, set flag.
+  \ifdim\ht\WF@box<.5\p@ % too tall (starts with \vbox) or too short
+   \global\setbox\WF@box\vtop{\vskip-1.4ex\unvbox\WF@box}\fi
+  \global\WF@size\dp\WF@box % box is guaranteed to have little height.
+  \global\advance\WF@size1.5\baselineskip \global\advance\WF@size\tw@\intextsep
+  \aftergroup\WF@startfloating % even when not really floating!
+  \ifWF@float\else \ifhmode
+     {\unskip \parfillskip\z@skip \par \vskip-\parskip}\aftergroup\noindent
+  \fi\fi \global\@ignoretrue}
+
+\let\endwrapfigure\endwrapfloat
+\let\endwraptable\endwrapfloat
+
+% Subvert \everypar to float fig and do wrapping.  Also for non-float.
+\def\WF@startfloating{%
+ \WF@everypar\expandafter{\the\everypar}\let\everypar\WF@everypar
+ \WF@@everypar{\ifvoid\WF@box\else\WF@floathand\fi \the\everypar
+ \WF@wraphand
+}}
+
+\def\WF@floathand{%
+\ifx\parshape\WF@fudgeparshape \WF@fltmes\else
+  \ifx\par\@@par\ifnum\@@parshape=\z@\ifdim\hangindent=\z@
+    \setbox\z@\lastbox \begingroup
+    \@@par \WF@@everypar{}\WF@putfigmaybe
+    \endgroup % start wrapping
+    \ifvoid\z@\else\box\z@\fi % replace indentation
+  \else\WF@fltmes\fi\else\WF@fltmes\fi\else\WF@fltmes\fi\fi}
+
+% Put fig here if it fits or if it can't float
+\def\WF@putfigmaybe{%
+\ifinner
+  \vskip-\parskip \global\WF@floatfalse
+  \let\pagetotal\maxdimen % kludge flag for "not top of page"
+\else % outer page
+  \@tempdima\pagedepth % save page depth
+   {\advance\parskip\@tempdima\vskip-\parskip}% back up to baseline
+   \penalty\interlinepenalty % update pg. parameters
+   \@tempdimb\pagegoal \advance\@tempdimb-\pagetotal % room left on page
+   \ifdim\@tempdimb<\z@ % \WF@info{Page overfull already;}%
+      \global\WF@floatfalse
+      \ifdim-\@tempdimb>\pageshrink \else \pagebreak \fi
+   \else
+      \ifdim\WF@size>\@tempdimb
+%        \WF@info{Size \the\WF@size\space does not fit in \the\@tempdimb}%
+         \ifWF@float \dimen@.5\baselineskip \else \dimen@ 2\baselineskip\fi
+         \ifdim\pagestretch>\dimen@ \dimen@\pagestretch \fi
+         \ifdim\pagefilstretch>\z@ \dimen@\@tempdimb \fi
+         \ifdim\pagefillstretch>\z@ \dimen@\@tempdimb \fi
+         \advance\dimen@.5\baselineskip
+         \ifdim\dimen@>\@tempdimb % \WF@info{Page nearly full; can stretch}%
+            \global\WF@floatfalse \pagebreak
+         \fi
+      \else % \WF@info{Fits in \the\@tempdimb;}%
+         \global\WF@floatfalse
+   \fi\fi
+   \vskip\@tempdima\relax % (return erased page depth)
+\fi
+\noindent
+\ifWF@float
+  \WF@fltmes
+\else % putting here;
+  \WF@info{Put \WF@wfname here:}%
+  {\ifodd\if@twoside\c@page\else\@ne\fi % assign l/r to i/o placement
+    \lccode`i`l\lccode`o`r\else \lccode`i`r\lccode`o`l\fi
+    \xdef\WF@place{\the\lccode\lccode\WF@place}}% twice to get only l or r
+  \hbox to\z@{% llap or rlap depending on {l} or {r}; calc effective width
+   \@tempdima\wd\WF@box \@tempdimb\WF@ovh
+   \advance\@tempdima-\@tempdimb \advance\@tempdima\columnsep
+   \@tempdimb\hsize \advance\@tempdimb-\@tempdima
+   \xdef\WF@adjlw{\the\@tempdima}%
+   \ifnum `l=\WF@place % fig on left
+    \hss % figure overlaps space to the left
+    \def\@tempa{\kern\columnsep}% position to left of the gap
+   \else  %  fig on right
+    \@tempdima\z@ % no left indentation
+    \kern\@tempdimb \kern\columnsep
+    \def\@tempa{\hss}% figure overlaps space to the right
+   \fi
+   \ifdim\@tempdimb<\hsize
+    \xdef\WF@wrapil{\the\@tempdima \the\@tempdimb}% indentation and length
+    \xdef\WF@adjtlm{\the\@tempdima}%
+   \else
+    \xdef\WF@wrapil{\z@ \the\hsize}%
+    \xdef\WF@adjlw{\z@}\xdef\WF@adjtlm{\z@}%
+   \fi
+   \ifdim\pagetotal=\z@ % \WF@info{Put \WF@wfname at top of p.\thepage}%
+    \global\advance\WF@size-\intextsep
+   \else % \WF@info{Putting \WF@wfname in middle of page}%
+    \setbox\WF@box\hbox{\lower\intextsep\box\WF@box}%
+   \fi \dp\WF@box\z@ \box\WF@box \@tempa
+  }% end \hbox to 0pt
+  \aftergroup\WF@startwrapping % after the \endgroup which immediately follows
+\fi}
+
+\def\WF@startwrapping{%
+ \ifx\WF@wli\@empty
+  {\advance\WF@size1.1\baselineskip
+  \divide\WF@size\baselineskip \global\c@WF@wrappedlines\WF@size}%
+ \else
+  \setcounter{WF@wrappedlines}{\WF@wli}\global\advance\c@WF@wrappedlines\@ne
+ \fi
+ \ifnum\c@WF@wrappedlines>\@ne
+  \let\parshape\WF@fudgeparshape \let\WF@pspars\@empty \let\WF@@par\par
+  \def\@setpar##1{\def\WF@@par{##1}}\def\par{\@par}\let\@par\WF@mypar
+  \xdef\WF@restoretol{\tolerance\the\tolerance}\tolerance9999
+  \advance\linewidth-\WF@adjlw \advance\@totalleftmargin\WF@adjtlm
+ \fi}
+
+\def\WF@wraphand{%
+\ifnum\c@WF@wrappedlines<\tw@ \WF@finale
+\else \begingroup % Create \parshape command:
+ \@tempcnta\@ne \let\WF@wrapil\relax \gdef\WF@ps{}%
+ \@whilenum \@tempcnta<\c@WF@wrappedlines\do{% repeated indentation, length
+  \xdef\WF@ps{\WF@ps\WF@wrapil}\advance\@tempcnta\@ne
+ }\endgroup
+ \ifx\WF@pspars\@empty
+  \@@parshape\c@WF@wrappedlines \WF@ps \WF@noil
+ \else % use external `parshape' values to modify my parshape
+  \WF@modps
+\fi\fi}
+
+\def\WF@mypar{\relax
+ \WF@@par % what the rest of LaTeX expects \par to be (usually \@@par)
+ \ifnum\@@parshape=\z@ \let\WF@pspars\@empty \fi % reset `parshape'
+ \global\advance\c@WF@wrappedlines-\prevgraf \prevgraf\z@
+ \ifnum\c@WF@wrappedlines<\tw@ \WF@finale \fi}
+
+\def\WF@modps{\begingroup
+  \afterassignment\@tempdimb \@tempdima\WF@pspars % a=ind, b=wid
+  \advance\@tempdima-\WF@adjtlm \advance\@tempdimb\WF@adjlw
+%  \afterassignment\dimen@\advance\@tempdima\WF@wrapil
+%  \advance\@tempdimb\dimen@ \advance\@tempdimb-\hsize
+  \let\WF@wrapil\WF@pspars%{\the\@tempdima \the\@tempdimb}%
+  \edef\@tempb{\@@parshape\c@WF@wrappedlines \WF@ps \the\@tempdima \the\@tempdimb}%
+  \expandafter\endgroup\@tempb}
+
+\let\@@setpar\@setpar
+\def\WF@noil{\z@ \hsize}
+\let\WF@pspars\@empty
+
+\def\WF@fudgeparshape{\relax \ifnum\c@WF@wrappedlines<\tw@ \WF@finale
+  \else \afterassignment\WF@fudgeparshapee \fam \fi}
+\def\WF@fudgeparshapee{\ifnum\fam=\@ne \expandafter \WF@parshapeee \else
+  \WF@conflict \@@parshape\fam \fi}
+\def\WF@parshapeee#1#2{\begingroup\delimitershortfall#1%
+   \nulldelimiterspace#2%\advance\nulldelimiterspace\WF@adjlw
+   \edef\@tempa{\def\noexpand\WF@pspars{%
+      \the\delimitershortfall \the\nulldelimiterspace}}%
+  \expandafter\endgroup\@tempa \WF@wraphand}
+
+\def\WF@finale{\ifx\parshape\WF@fudgeparshape
+ \WF@restoretol \let\@setpar\@@setpar \let\par\WF@@par
+ \advance\linewidth\WF@adjlw \advance\@totalleftmargin-\WF@adjtlm
+ \WF@info{Finish wrapping text}%
+ \ifx\par\@@par \def\@par{\let\par\@@par\par}\else \let\@par\WF@@par \fi
+ \let\parshape\@@parshape
+ \parshape\ifx\WF@pspars\@empty \z@ \else \@ne \WF@pspars\fi \fi
+ \ifvoid\WF@box \ifx\everypar\WF@everypar
+  \let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
+ \fi\fi}
+
+\newcommand{\WFclear}{\par 
+ \ifvoid\WF@box\else \vskip\bigskipamount \box\WF@box
+ \let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
+ \fi \global\c@WF@wrappedlines\z@ \WF@finale}
+
+\begingroup
+ \toks0={\let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
+   \let\parshape\@@parshape \let\@setpar\@@setpar }
+ \toks1=\expandafter{\@arrayparboxrestore}
+ \toks2=\expandafter{\clearpage}
+ \edef\@tempa{\def\noexpand\@arrayparboxrestore{\the\toks0 \the\toks1}%
+      \def\noexpand\clearpage{\noexpand\protect\noexpand\WFclear \the\toks2}}
+ \expandafter
+\endgroup\@tempa
+
+\@ifundefined{@capwidth}{\let\@capwidth\hsize}{}% Pamper RevTeX's Stupidity
+
+\def\WF@conflict{\WF@warning
+ {\WF@wfname used inside a conflicting environment}}
+\def\WF@collision{\WF@warning{Collision between wrapping environments}}
+\def\WF@fltmes{\ifWF@float \WF@info{\WF@wfname floats}%
+ \else \WF@warning{Stationary \WF@wfname forced to float}\fi}
+
+\let\WF@warning\@warning
+\let\WF@info\@gobble
+
+% Support float.sty: float styles and \newfloat.  Make \newfloat{foo}
+% define the `wrapfoo' environment.  Support \newfloat from memoir.cls
+% and \newfloatlist from ccaption.sty.
+% 
+\let\WF@floatstyhook\relax
+
+\@ifundefined{newfloat}{}{% There is a \newfloat command
+%
+ \@ifundefined{restylefloat}{
+ % \newfloat comes from somewhere besides float.sty 
+   \@ifclassloaded{memoir}{
+    \toks@=\expandafter\expandafter\expandafter
+     {\csname\string\newfloat\endcsname [{#1}]{#2}{#3}{#4}%
+     \newenvironment{wrap#2}{\wrapfloat{#2}}{\endwrapfloat}%
+    }
+    \edef\@tempa{\def\expandafter\noexpand\csname\string\newfloat\endcsname
+      [##1]##2##3##4{\the\toks@}}
+    \@tempa
+   }% end memoir support
+   {}% Other origins of \newfloat here??
+ }{
+ %  float.sty handler.  Ooops:  Two versions for different versions
+ %  Changing \float@restyle (or \restylefloat) changes \newfloat too.
+ \@ifundefined{float@restyle}{% older float.sty
+  \toks@=\expandafter{\restylefloat{#1}% (env may or may not be defined)
+   \@namedef{wrap#1}{\def\@captype{#1}\@nameuse{fst@#1}%
+    \def\WF@floatstyhook{\let\@currbox\WF@box \columnwidth\wd\WF@box 
+       \global\setbox\WF@box\float@makebox}%
+    \@ifnextchar[\WF@wr{\WF@wr[]}}%
+   \expandafter\let\csname endwrap#1\endcsname \endwrapfigure
+  }\edef\@tempa{\def\noexpand\restylefloat##1{\the\toks@}}
+ }{% newer float.sty: use \float@restyle, and \float@makebox takes width arg
+  \toks@=\expandafter{\float@restyle{#1}% (env may or may not be defined)
+   \@namedef{wrap#1}{\def\@captype{#1}\@nameuse{fst@#1}%
+    \def\WF@floatstyhook{\let\@currbox\WF@box 
+       \global\setbox\WF@box\float@makebox{\wd\WF@box}}%
+    \@ifnextchar[\WF@wr{\WF@wr[]}}%
+   \expandafter\let\csname endwrap#1\endcsname \endwrapfigure
+  }\edef\@tempa{\def\noexpand\float@restyle##1{\the\toks@}}
+ }
+ \@tempa % perform redefinitions
+ %
+ }% End float.sty handler
+}% End redefinitions of \newfloat
+
+% Support ccaption.sty 
+\@ifundefined{\string\newfloatlist}{}{
+ \toks@=\expandafter\expandafter\expandafter
+   {\csname\string\newfloatlist\endcsname [{#1}]{#2}{#3}{#4}{#5}%
+  \@namedef{wrap#2}{\wrapfloat{#2}}%
+  \expandafter\let\csname endwrap#2\endcsname \endwrapfloat
+ }
+ \edef\@tempa{\def\expandafter\noexpand\csname\string\newfloatlist\endcsname
+   [##1]##2##3##4##5{\the\toks@}}
+ \@tempa
+}
+
+% Process package options.
+
+\@ifundefined{DeclareOption}{\endinput}{}
+
+\def\WF@warning{\PackageWarning{wrapfig}}
+\ProvidesPackage{wrapfig}[2003/01/31 \space  v 3.6]
+\DeclareOption{verbose}{\def\WF@info{\PackageInfo{wrapfig}}}
+\ProcessOptions
+\AtEndDocument{\WFclear}
+
+\endinput
+
+%%%%%  ----- End definitions ----- %%%%%
+
+%%%%%  ----- Begin Instructions ----- %%%%%
+
+
+W R A P F I G . S T Y  \ \  ver 3.6 \ \ (Jan 31, 2003)
+
+Copyright (C) 1991-2003 by Donald Arseneau  (asnd@triumf.ca)
+
+Wrapfig.sty provides the environments "wrapfigure" and "wraptable" for
+typesetting a narrow float at the edge of the text, and making the text
+wrap around it.  The "wrapfigure" and "wraptable" environments interact
+properly with the "\caption" command to produce proper numbering, but
+they are not regular floats like "figure" and "table", so (beware!) they
+may be printed out of sequence with the regular floats.  There are four
+parameters for "\begin{wrapfigure}", two optional and two required, plus
+the text of the figure, with a caption perhaps:
+
+   \begin{wrapfigure}[12]{r}[34pt]{5cm} <figure> \end{wrapfigure}
+                      ==  =  ====  ===
+   [number of narrow lines] {placement} [overhang] {width}
+
+Some idiosyncrasies:
+
+  - You must not specify a wrapfigure in any type of list environment or
+    or immediately before or immediately after one.  It is OK to follow
+    a list if there is a blank line ("\par") in between.
+
+  - If you put a wrapfigure in a parbox or a minipage, or any other type
+    of grouping, the text wrapping should end before the group does.
+
+  - It does work in two-column format, but are your figures that small?
+
+  - It may be out of sequence with regular floats.
+
+  - The hlines that may be printed above and below floats are ignored;
+    you must insert them manually if desired.
+
+  - "\linewidth" is now adjusted within the wrapped text, but since it
+    can only be set for whole paragraphs at a time, it will persist with
+    the wrong value after the wrapping, until the paragraph is finished.
+
+New wrapping environments may be added when new float types are defined
+(using memoir.cls, float.sty, or ccaption.sty).  Any wrapping environment,
+"wrapfigure", "wraptable", or something else may be invoked using the
+"wrapfloat" environment, as in "\begin{wrapfloat}{figure}{O}{5cm}".
+
+To use float.sty properly, load package "float" before "wrapfig", 
+and declare any new float types after loading both.  Likewise for
+ccaption.sty and "\newfloatlist" and memoir.cls and its "\newfloat".
+
+\section{Placement and Floating}
+
+Parameter "#2" (required) is the figure placement code, but the valid
+codes are different from regular figures.  They come in pairs: an
+uppercase version which allows the figure to float, and a lowercase
+version that puts the figure ``exactly here''.
+
+  r  R  -  the right side of the text
+  l  L  -  the left side of the text
+  i  I  -  the inside edge--near the binding (if "[twoside]" document)
+  o  O  -  the outside edge--far from the binding
+
+You should specify one code only, not a list.  The figure or table must
+be on one side or the other; it cannot be in the middle with text on
+both sides.  The "i" and "o" options refer to the inside and outside of
+the whole page, not individual columns.
+
+The ability to float is somewhat restricted, and you will get best results
+by giving exact manual placement, but floating is more convenient while
+revising the document.  Any changes to the formatting can ruin your manual
+positioning so you should adjust the placement just before printing a
+final copy.  Here are some tips for good placement:
+
+  - The environment should be placed so as to not run over a page break.
+
+  - The environment must not be placed in special places like lists.
+
+  - For esthetic reasons, only plain text should wrap around the figure.
+    Section titles and big equations look bad; lists are bad if the figure 
+    is on the left.  (All these function properly, they just don't look 
+    very good.)  Small equations look fine.
+
+  - It is convenient to begin the environment between paragraphs, but if
+    you want placement in the middle of a paragraph, you must put the
+    environment between two words where there is a natural line break.
+
+When floating, \LaTeX\ tries to apply these rules.  More specifically,
+a floated wrapping environment will only begin...
+
+  - at the beginning of a paragraph,
+
+  - when there is enough room on the page, or it is possible to go on
+    the next page,
+
+  - if the `paragraph' is not in a section title or a list,
+
+  - if the paragraph is not wrapping around another figure,
+
+  - in the main text (not in a minipage etc.)
+
+It is possible that a non-floating wrapfigure will be forced to float
+when an earlier one is still being processed.  A warning will be written
+in that case.  You can have more information about the floating process
+written to the log file by specifying "\usepackage[verbose]{wrapfig}".
+
+If there is a lot of flexibility on a page, a floating wrapfigure may
+be placed badly; you must turn to manual placement.  A rare problem is
+that floats and footnotes specified within the wrapping text can also
+cause poor placement and bad formatting.
+
+
+\section {Sizing and optional overhang}
+
+Parameter "#4" (the second required parameter) is the width of the figure
+or table.  Given the way that \LaTeX\ puts just about everything into boxes 
+with the current line-width, the width parameter will take precedence over 
+whatever natural width the figure has.  In particular, the caption is always 
+typeset with the specified width.  If the figure is wider than the space 
+allotted, you will get an ``overfull box'' warning.
+
+However, if you specify a width of *zero* ("0pt"), the actual width of
+the figure will determine the wrapping width.  A following "\caption"
+should have the same width as the figure, but it might fail badly; it
+is safer to specify a width when you use a caption.
+
+\LaTeX\ will wrap surrounding text around the figure, leaving a gap of
+"\intextsep" at the top and bottom, and "\columsep" at the side, by
+producing a series of shortened text lines beside the figure.  The
+indentation (shortening) of the text is the figure width plus "\columnsep"
+minus overhang (if any; see below).
+
+\LaTeX\ calculates the number of short lines needed based on the height
+of the figure and the length "\intextsep".  You can override this guess
+by giving the first optional argument (parameter "#1") specifying the
+number of shortened lines (counting each displayed equation as 3 lines).
+This is particularly useful when the surrounding text contains extra
+vertical spacing that is not accounted for automatically.
+
+The second optional parameter ("#3") tells how much the figure should
+hang out into the margin. The default overhang is given by the length
+"\wrapoverhang", which is "0pt" normally but can be changed using
+"\setlength".  For example, to have all wrapfigures use the space
+reserved for marginal notes,
+
+    \setlength{\wrapoverhang}{\marginparwidth}
+    \addtolength{\wrapoverhang}{\marginparsep}
+
+When you do specify the overhang explicitly for a particular figure, you
+can use a special unit called "\width" meaning the width of the figure.
+For example, "[0.5\width]" makes the center of the figure sit on the
+edge of the text, and "[\width]" puts the figure entirely in the margin
+(and the adjacent text is indented by just "\columnsep").  This "\width"
+is the actual width of the wrapfigure, which may be greater than the 
+declared width.
+
+
+\section{Some Random Implementation Notes}
+
+Unfortunately, \LaTeX's system of setting "\everypar" and "\par" is
+unable to coexist peacefully with a wrapping environment, so I was
+forced to subvert the "\@setpar" mechanism and "\everypar".  ("\everypar"
+is already subverted once by NFSS.)
+
+When checking the room left on the page, remember that if there is less
+than "\baselineskip" the new paragraph will begin on the next page, even
+if there is no page stretch. If non-floating, I force a bad page break
+rather than have the figure hang into the bottom margin.
+
+Here are notes on various variables and some macros; what info they
+store and how they are used.
+
+  \WF@wli - number-of-wrapped-lines parameter, saved for start of wrapping.
+     Set globally by "\WF@wr" (set empty if no optional parameter given).
+     The floating mechanism ignores this and uses the real size.
+
+  \WF@ovh - margin overhang set globally by "\WF@rapt", saved until placing
+     figure (but not reset).  Actually, the setting is very tricky so that
+     the expected values are used when a figure floats. First, the expression
+     is saved without evaluation by "\WF@rapt" ("\begin{wrapfigure}") because
+     "\width" is still unknown.  Soon after that, "\endwrapfigure" executes
+     "\WF@ovh" to evaluate the overhang and save the result (so that changes
+     to "\wrapoverhang" while this figure is floating won't affect this
+     figure). Finally, it is used by "\WF@putfigmaybe" when printing the fig.
+
+  \WF@place - a macro that is used as a number, giving the placement code.
+     It might start out as "`I" and later be converted to "114" (r).
+
+  \WF@box - tested for void at "\begin{wrapfigure}", to avoid collisions,
+     by "\everypar" to do floating, and by "\WF@finale" before resetting
+     "\everypar".  Voided globally when used by "\WF@putfigmaybe" (or by
+     "\WF@wr" if an old figure must be dumped prematurely).
+
+  \par - test if it is "\@@par" by "\begin{wrapfigure}" and "\WF@floathand"
+     to float past special environments.  It is set to "\@par" ("\WF@mypar")
+     by "\WF@startwrapping", and restored by an end-group (bad!) or by
+     "\WF@finale" (good).  It is protected from change by redefining
+     "\@setpar".
+
+  \parshape - let to "\WF@fudgeparshape" by "\WF@startwrapping", so lists
+     will continue wrapping; "\@@parshape" preserves the real "\parshape"
+     command, and it is restored by "\WF@finale" or "\@parboxrestore".
+     "\WF@floathand" and "\WF@wr" test if old wrapping is still in progress
+     with "\ifx\parshape\WF@fudgeparshape". The value of "\@@parshape" is
+     also tested to float past lists and other wrapping environments.
+
+  \hangindent - tested to float past section titles etc.
+
+  \c@WF@wrappedlines - the number of shortened lines + 1; set globally by
+     "\WF@startwrapping" and decremented by "\par" ("\WF@mypar").  It is > 1
+     only when wrapping is incomplete.  "\WF@wraphand", "\WF@fudgeparshape",
+     and "\WF@mypar" test the number for calling "\WF@finale".  It may get
+     stuck at some high value if "\par" is restored by an end-group, (and
+     wrapping is terminated prematurely) so it is unwise to use this as a
+     test for wrapping-complete.
+
+  \pagetotal - one of many parameters used to compute floating.  When
+     putting a wrapfigure in a parbox, I assign "\let\pagetotal\maxdimen"
+     (locally!) to signal not-top-of-page and no floating.
+
+  \WF@pspars - the "\parshape" parameters as LaTeX sets them for lists
+     ("\WF@fudgeparshape"); when wrapping I test it and use it to modify my
+     own real params for the paragraph.  They are also used when "\parshape"
+     is restored after wrapping.
+
+  \WF@finale - is performed by "\par" when wrapping should end.  However,
+     that might happen inside a group (a list especially), so the subverted
+     versions of "\par", "\parshape" etc. will be reinstated when the group
+     ends.  Thus, they must themselves test "\c@WF@wrappedlines" < 2 to see
+     when wrapping is over, and if so, they should just do "\WF@finale" again.
+
+These are the tests to see if a floating wrapfigure will fit at a particular
+spot.  These tests are performed at the beginning of every paragraph after
+the figure, except in lists etc.  ("\pagegoal" - "\pagetotal" is the room
+left on the page.)
+
+  >
+  room_left := \pagegoal - \pagetotal
+  if  room_left < 0  then page overfull already: put figure (on next page)
+  else
+     if  figure_size > room_left  then does not fit
+        if  max(min_stretch, \pagestretch) + extra > room_left
+           then page can stretch until full: put figure (at top of next page)
+        fi
+     else figure fits: put figure
+  fi fi
+  <
+
+Even if a wrapfigure is not floating, it will go through the same logic
+to generate a "\pagebreak", and maybe an underfull page, when the current
+page can stretch until full.  The "min_stretch" depends on whether it is
+floating or not: ".5\baselineskip" (floating) "2\baselineskip" (not). The
+"extra" is ".5\baselineskip" in either case.  These values can be adjusted.
+
+There are some other `magic numbers' for floating that aren't really so
+special, but you must change them together if you change them at all.
+To make floating wrapfigures float less and fit on pages more frequently,
+but not change the number of wrapped lines, decrease the "1.5" in
+"\global\advance\WF@size1.5\baselineskip" and increase the "1.1" in
+"\advance\WF@size1.1\baselineskip" by the same amount (and vice versa).
+To make more (or fewer) wrapped lines for the same size figure, without
+changing the floating, change "1.1" in "\advance\WF@size1.1\baselineskip"
+unilaterally.
+
+%%%%%  ----- End Instructions ----- %%%%%
+
+Test file integrity:  ASCII 32-57, 58-126:  !"#$%&'()*+,-./0123456789
+:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~