Design changes, partly fix #16
Manual merge of @TheInterframe's changes