diff --git a/book/51_upgrading b/book/51_upgrading
index 5389760..d978564 100644
--- a/book/51_upgrading
+++ b/book/51_upgrading
@@ -1,5 +1,93 @@
= Appendix I: Upgrade Notes
== From 1.5 to 2.0
+=== Rack
-TODO
\ No newline at end of file
+The biggest change in 2.0 is that it now uses Rack[http://rack.rubyforge.org/]
+internally. This means that you'll now have to deploy Camping differently, but
+hopefully more easily too. Now every Camping application is also a Rack
+application, so simply check out the documentation to the server of your
+choice.
+
+=== require 'camping/db'
+
+In earlier versions of Camping, you loaded database support by:
+
+ require 'camping/db'
+
+Actually, this loaded a very thin layer on top of ActiveRecord, and in the
+future we want to experiment with other libraries. Therefore you should now
+simply remove the line, and instead just inherit from Base right away. This
+also means you'll have to place your migrations *after* the models.
+
+We also encourage you to use Model.table_name instead of
+:appname_model, just to make sure it's named correctly.
+
+ ## Don't require anything:
+ # require 'camping/db'
+
+ module Nuts::Models
+ ## Just inherit Base:
+ class Page < Base; end
+
+ ## Migrations have to come *after* the models:
+ class CreateTheBasics < V 0.1
+ def self.up
+ create_table Page.table_name do |t|
+ ...
+ end
+ end
+
+ def self.down
+ drop_table Page.table_name
+ end
+ end
+ end
+
+=== Cookie Sessions
+
+Camping 2.0 now uses a cookie-based session system, which means you now longer
+need a database in order to use sessions. The disadvantage of this is that
+you are restricted to only around 4k of data. See below for the changes
+required, and see Camping::Session more details.
+
+ module Nuts
+ ## Include Camping::Session as before:
+ include Camping::Session
+
+ ## But also define a secret:
+ secret "Very secret text, which no-one else should know!"
+ end
+
+ def Nuts.create
+ ## And remove the following line:
+ # Camping::Models::Session.create_schema
+ end
+
+=== Error handling
+
+Camping now uses three methods in order to handle errors. These replaces the
+old classes NotFound and ServerError.
+
+* Camping::Base#r404 is called when a route can't be found.
+* Camping::Base#r501 is called when a route is found, but doesn't respond to
+ the method.
+* Camping::Base#r500 is called when an error happens.
+
+You can override these in your application:
+
+ module Nuts
+ def r404(path)
+ "Sorry, but I can't find #{path}."
+ end
+
+ def r501(method)
+ "Sorry, but I can't respond to #{method}."
+ end
+
+ def r500(klass, method, ex)
+ "Sorry, but #{klass}##{method} failed with #{ex}."
+ end
+ end
+
+It should be noted that this might change in the future.