diff --git a/README.rst b/README.rst
index 43e98ace9b7776397692a2964aa99e66f983a241..f122e5f5850e1a15cb5d513307e61cbf5274cc8f 100644
--- a/README.rst
+++ b/README.rst
@@ -13,6 +13,7 @@ Features
 - Flask-WTForms with login and registration forms
 - Procfile for deploying to a PaaS (e.g. Heroku)
 - nose for testing
+- A simple ``manage.py`` script.
 
 Screenshots
 -----------
diff --git a/{{cookiecutter.repo_name}}/README.rst b/{{cookiecutter.repo_name}}/README.rst
index 01c20bfc51248f6d5ca0ffb53e9ccd75cd26af81..97eb4559cb8e65924512ff2727ee8e4d72b85084 100644
--- a/{{cookiecutter.repo_name}}/README.rst
+++ b/{{cookiecutter.repo_name}}/README.rst
@@ -13,4 +13,15 @@ Quickstart
     git clone https://github.com/{{cookiecutter.github_username}}/{{ cookiecutter.repo_name }}
     cd {{cookiecutter.repo_name}}
     pip install -r requirements/dev.txt
-    python run.py
+    python manage.py createdb
+    python manage.py runserver
+
+
+Shell
+-----
+
+To open the interactive shell, run ::
+
+    python manage.py shell
+
+By default, you will have access to ``app``, ``models``, and ``db``.
diff --git a/{{cookiecutter.repo_name}}/manage.py b/{{cookiecutter.repo_name}}/manage.py
new file mode 100644
index 0000000000000000000000000000000000000000..10acc9bc65ba9d0dc2221a4f081ed458eb7f9776
--- /dev/null
+++ b/{{cookiecutter.repo_name}}/manage.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+from flask.ext.script import Manager, Shell, Server
+from {{ cookiecutter.repo_name }} import models
+from {{ cookiecutter.repo_name }}.main import app, db
+
+manager = Manager(app)
+
+def _make_context():
+    '''Return context dict for a shell session so you can access
+    app, db, and models by default.
+    '''
+    return {'app': app, 'db': db, 'models': models}
+
+@manager.command
+def createdb():
+    '''Create a database from the tables defined in models.py.'''
+    db.create_all()
+
+manager.add_command("runserver", Server())
+manager.add_command("shell", Shell(make_context=_make_context))
+
+if __name__ == '__main__':
+    manager.run()
diff --git a/{{cookiecutter.repo_name}}/requirements/dev.txt b/{{cookiecutter.repo_name}}/requirements/dev.txt
index 7209a440c61fb6fb5232e0f0770b46c8cf7e78ca..ecbb1f4de8a91ca4665f75796ef3a06863edf658 100644
--- a/{{cookiecutter.repo_name}}/requirements/dev.txt
+++ b/{{cookiecutter.repo_name}}/requirements/dev.txt
@@ -3,3 +3,6 @@
 
 # Testing
 nose
+
+# Management script
+Flask-Script
diff --git a/{{cookiecutter.repo_name}}/requirements/prod.txt b/{{cookiecutter.repo_name}}/requirements/prod.txt
index 4d290a762dcff317b520914a7fa28d330359981f..149deabe5ffc9b76b93e5916db2441d84fd97ee7 100644
--- a/{{cookiecutter.repo_name}}/requirements/prod.txt
+++ b/{{cookiecutter.repo_name}}/requirements/prod.txt
@@ -1,12 +1,12 @@
 # Everything that needed in production
 Flask==0.10.1
 Flask-SQLAlchemy==1.0
-Flask-WTF==0.9.0
+Flask-WTF==0.9.2
 Jinja2==2.7
 MarkupSafe==0.18
 SQLAlchemy==0.8.2
 WTForms==1.0.4
-Werkzeug==0.9.3
+Werkzeug==0.9.4
 gunicorn==17.5
 itsdangerous==0.23
 wsgiref==0.1.2
diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/main.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/main.py
index 9544879e65ef2ffa4c852b2b8c3aea56be6b6894..6e6f8cdb699310c1456b3e0ccbe04d7c7a0d448f 100644
--- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/main.py
+++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/main.py
@@ -11,4 +11,4 @@ from .views import *
 
 if __name__ == '__main__':
     port = int(os.environ.get('PORT', 5000))
-    app.run(host='0.0.0.0', port=port)
\ No newline at end of file
+    app.run(host='0.0.0.0', port=port)
diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/models.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/models.py
index 1269ce544025ce4af1b46d76325b4c21c7bce027..fa200d2a57e9fc5881af31962be71f2457938c9f 100644
--- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/models.py
+++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/models.py
@@ -21,6 +21,6 @@ class User(db.Model):
         self.password = password
 
     def __repr__(self):
-        return '<User %r>' % (self.username)
+        return '<User "{username}">'.format(username=self.username)
 
-db.create_all()
\ No newline at end of file
+db.create_all()
diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/settings.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/settings.py
index 43c9697f86332d7a4563bab55b805598f5ba5573..700669520b8a726f5e77fb85e65dab819108c5a9 100644
--- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/settings.py
+++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/settings.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 import os
 
-APP_DIR = os.path.abspath(os.path.dirname(__file__))
+APP_DIR = os.path.abspath(os.path.dirname(__file__))  # This directory
 PROJECT_ROOT = os.path.abspath(os.path.join(APP_DIR, os.pardir))
 DB_NAME = "test.db"
 DB_PATH = os.path.join(PROJECT_ROOT, DB_NAME)