anchor.diff:  	Map<String, String> note;
   	StreamSubscription enterEditMode, exitEditMode;
   
  -	static final NodeValidatorBuilder HtmlValidator = new NodeValidatorBuilder.common()
  -		..allowElement("a", attributes: ["href"]);
  -
   	NoteWindow(this.noteId, [this.writeMode = false]) {
   		// Get the note
  -		note = getNote();
  +		getNote().then((Map note) {
  +			if (note == null) {
  +				// Exit
  +				new Toast("That note doesn't exist");
  +			} else {
  +				this.note = note;
   
  -		// Set up the window
  -		id = "notewindow-${WindowManager.randomId}";
  -		isWriter = (note["writer"] == game.username);
  -		displayElement = querySelector(".notewindow-template").clone(true);
  -		displayElement
  -			..classes.remove("notewindow-template")
  -			..id = id;
  +				// Set up the window
  +				id = "notewindow-${WindowManager.randomId}";
  +				isWriter = (note["username"] == game.username);
  +				displayElement = querySelector(".notewindow-template").clone(true);
  +				displayElement
  +					..classes.remove("notewindow-template")
  +					..id = id;
   
  -		if (writeMode) {
  -			EditMode_Enter();
  -		} else {
  -			EditMode_Exit();
  -		}
  +				if (writeMode) {
  +					EditMode_Enter();
  +				} else {
  +					EditMode_Exit();
  +				}
   
  -		// Show the window
  -		querySelector("#windowHolder").append(displayElement);
  -		prepare();
  -		displayElement.hidden = false;
  +				// Show the window
  +				querySelector("#windowHolder").append(displayElement);
  +				prepare();
  +				displayElement.hidden = false;
  +			}
  +		});
   	}
   
   	EditMode_Enter() {
  
positive.code: 		// Delete the window element
  		displayElement.remove();
  	}
  }
negative.code: 			..querySelector(".notewindow-read").hidden = false
  			..querySelector(".notewindow-write").hidden = true;
  		// Display values
  		DateTime date = DateTime.parse(note["date"]).toLocal();
  		String dateString = "${date.hour}:${date.minute}, ${date.day}/${date.month}/${date.year}";
  		displayElement
  			..querySelector(".notewindow-read-title").text = note["title"]
  			..querySelector(".notewindow-read-body").setInnerHtml(note["body"].replaceAll("\n", "<br>"), validator: Chat.VALIDATOR)
  			..querySelector(".notewindow-read-footer-date").text = dateString;
  		// Handle user-specific content
  		if (isWriter) {
  			displayElement
  				..querySelector(".notewindow-read-editbtn").hidden = false
  				..querySelector(".notewindow-read-footer-username").text = "You";
  			enterEditMode = displayElement.querySelector(".notewindow-read-editbtn").onClick.listen((_) {
  					EditMode_Enter();
  					enterEditMode.cancel();
  			});
  		} else {
  			displayElement
  				..querySelector(".notewindow-read-editbtn").hidden = true
  				..querySelector(".notewindow-read-footer-username").setInnerHtml(
  					'<a title="Open Profile" href="http://childrenofur.com/profile/?username=${note["writer"]}" target="_blank">${note["writer"]}</a>',
  					validator: Chat.VALIDATOR);
  		}
  		setNote();
  	}
  
  	Future<Map> getNote() async {
  		String json = await HttpRequest.getString("http://${Configs.utilServerAddress}/note/find/$id");
  		try {
  			return JSON.decode(json);
  		} catch (_) {
  			return null;
  		}
  	}
  
  	Future<Map> setNote() async {
  		// TODO: send to server (not like this, probably)
  		/*String json = (await HttpRequest.request("http://${Configs.utilServerAddress}/note/add",
  			method: "POST",
  			requestHeaders: {"Content-Type": "application/json"},
  			sendData: {
  				"username": game.username,
  				"title": (displayElement.querySelector(".notewindow-write-title") as TextInputElement).value,
  				"body": (displayElement.querySelector(".notewindow-write-body") as TextInputElement).value
  			}
  		)).responseText;*/
  	}
  
  	@override
  