diff --git a/ui-shared.c b/ui-shared.c
index 2eff79d..2596023 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -26,14 +26,6 @@
 		   tm->tm_hour, tm->tm_min, tm->tm_sec);
 }
 
-static long ttl_seconds(long ttl)
-{
-	if (ttl<0)
-		return 60 * 60 * 24 * 365;
-	else
-		return ttl * 60;
-}
-
 void cgit_print_error(char *msg)
 {
 	html("<div class='error'>");
@@ -361,24 +353,34 @@
 	      secs * 1.0 / TM_YEAR);
 }
 
-void cgit_print_docstart(char *title, struct cacheitem *item)
+void cgit_print_http_headers(struct cgit_context *ctx)
 {
-	html("Content-Type: text/html; charset=" PAGE_ENCODING "\n");
-	htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));
-	htmlf("Expires: %s\n", http_date(item->st.st_mtime +
-					 ttl_seconds(item->ttl)));
+	if (ctx->page.mimetype && ctx->page.charset)
+		htmlf("Content-Type: %s; charset=%s\n", ctx->page.mimetype,
+		      ctx->page.charset);
+	else if (ctx->page.mimetype)
+		htmlf("Content-Type: %s\n", ctx->page.mimetype);
+	if (ctx->page.filename)
+		htmlf("Content-Disposition: inline; filename=\"%s\"\n",
+		      ctx->page.filename);
+	htmlf("Last-Modified: %s\n", http_date(ctx->page.modified));
+	htmlf("Expires: %s\n", http_date(ctx->page.expires));
 	html("\n");
+}
+
+void cgit_print_docstart(struct cgit_context *ctx)
+{
 	html(cgit_doctype);
 	html("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>\n");
 	html("<head>\n");
 	html("<title>");
-	html_txt(title);
+	html_txt(ctx->page.title);
 	html("</title>\n");
 	htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version);
-	if (ctx.cfg.robots && *ctx.cfg.robots)
-		htmlf("<meta name='robots' content='%s'/>\n", ctx.cfg.robots);
+	if (ctx->cfg.robots && *ctx->cfg.robots)
+		htmlf("<meta name='robots' content='%s'/>\n", ctx->cfg.robots);
 	html("<link rel='stylesheet' type='text/css' href='");
-	html_attr(ctx.cfg.css);
+	html_attr(ctx->cfg.css);
 	html("'/>\n");
 	html("</head>\n");
 	html("<body>\n");
@@ -463,7 +465,7 @@
 	}
 }
 
-void cgit_print_pageheader(char *title, int show_search)
+void cgit_print_pageheader(struct cgit_context *ctx)
 {
 	static const char *default_info = "This is cgit, a fast webinterface for git repositories";
 	int header = 0;
@@ -475,40 +477,40 @@
 	html("<tr><td class='sidebar'>\n<a href='");
 	html_attr(cgit_rooturl());
 	htmlf("'><img src='%s' alt='cgit'/></a>\n",
-	      ctx.cfg.logo);
+	      ctx->cfg.logo);
 	html("</td></tr>\n<tr><td class='sidebar'>\n");
-	if (ctx.repo) {
+	if (ctx->repo) {
 		html("<h1 class='first'>");
-		html_txt(strrpart(ctx.repo->name, 20));
+		html_txt(strrpart(ctx->repo->name, 20));
 		html("</h1>\n");
-		html_txt(ctx.repo->desc);
-		if (ctx.repo->owner) {
+		html_txt(ctx->repo->desc);
+		if (ctx->repo->owner) {
 			html("<h1>owner</h1>\n");
-			html_txt(ctx.repo->owner);
+			html_txt(ctx->repo->owner);
 		}
 		html("<h1>navigate</h1>\n");
-		reporevlink(NULL, "summary", NULL, "menu", ctx.qry.head,
+		reporevlink(NULL, "summary", NULL, "menu", ctx->qry.head,
 			    NULL, NULL);
-		cgit_log_link("log", NULL, "menu", ctx.qry.head, NULL, NULL,
+		cgit_log_link("log", NULL, "menu", ctx->qry.head, NULL, NULL,
 			      0, NULL, NULL);
-		cgit_tree_link("tree", NULL, "menu", ctx.qry.head,
-			       ctx.qry.sha1, NULL);
-		cgit_commit_link("commit", NULL, "menu", ctx.qry.head,
-			      ctx.qry.sha1);
-		cgit_diff_link("diff", NULL, "menu", ctx.qry.head,
-			       ctx.qry.sha1, ctx.qry.sha2, NULL);
-		cgit_patch_link("patch", NULL, "menu", ctx.qry.head,
-				ctx.qry.sha1);
+		cgit_tree_link("tree", NULL, "menu", ctx->qry.head,
+			       ctx->qry.sha1, NULL);
+		cgit_commit_link("commit", NULL, "menu", ctx->qry.head,
+			      ctx->qry.sha1);
+		cgit_diff_link("diff", NULL, "menu", ctx->qry.head,
+			       ctx->qry.sha1, ctx->qry.sha2, NULL);
+		cgit_patch_link("patch", NULL, "menu", ctx->qry.head,
+				ctx->qry.sha1);
 
 		for_each_ref(print_archive_ref, &header);
 
-		if (ctx.repo->clone_url || ctx.cfg.clone_prefix) {
+		if (ctx->repo->clone_url || ctx->cfg.clone_prefix) {
 			html("<h1>clone</h1>\n");
-			if (ctx.repo->clone_url)
-				url = ctx.repo->clone_url;
+			if (ctx->repo->clone_url)
+				url = ctx->repo->clone_url;
 			else
-				url = fmt("%s%s", ctx.cfg.clone_prefix,
-					  ctx.repo->url);
+				url = fmt("%s%s", ctx->cfg.clone_prefix,
+					  ctx->repo->url);
 			html("<a class='menu' href='");
 			html_attr(url);
 			html("' title='");
@@ -520,10 +522,10 @@
 
 		html("<h1>branch</h1>\n");
 		html("<form method='get' action=''>\n");
-		add_hidden_formfields(0, 1, ctx.qry.page);
+		add_hidden_formfields(0, 1, ctx->qry.page);
 //		html("<table summary='branch selector' class='grid'><tr><td id='branch-dropdown-cell'>");
 		html("<select name='h' onchange='this.form.submit();'>\n");
-		for_each_branch_ref(print_branch_option, ctx.qry.head);
+		for_each_branch_ref(print_branch_option, ctx->qry.head);
 		html("</select>\n");
 //		html("</td><td>");
 		html("<noscript><input type='submit' id='switch-btn' value='switch'/></noscript>\n");
@@ -532,22 +534,22 @@
 
 		html("<h1>search</h1>\n");
 		html("<form method='get' action='");
-		if (ctx.cfg.virtual_root)
-			html_attr(cgit_fileurl(ctx.qry.repo, "log",
-					       ctx.qry.path, NULL));
+		if (ctx->cfg.virtual_root)
+			html_attr(cgit_fileurl(ctx->qry.repo, "log",
+					       ctx->qry.path, NULL));
 		html("'>\n");
 		add_hidden_formfields(1, 0, "log");
 		html("<select name='qt'>\n");
-		html_option("grep", "log msg", ctx.qry.grep);
-		html_option("author", "author", ctx.qry.grep);
-		html_option("committer", "committer", ctx.qry.grep);
+		html_option("grep", "log msg", ctx->qry.grep);
+		html_option("author", "author", ctx->qry.grep);
+		html_option("committer", "committer", ctx->qry.grep);
 		html("</select>\n");
 		html("<input class='txt' type='text' name='q' value='");
-		html_attr(ctx.qry.search);
+		html_attr(ctx->qry.search);
 		html("'/>\n");
 		html("</form>\n");
 	} else {
-		if (!ctx.cfg.index_info || html_include(ctx.cfg.index_info))
+		if (!ctx->cfg.index_info || html_include(ctx->cfg.index_info))
 			html(default_info);
 	}
 
@@ -556,18 +558,6 @@
 	html("<td id='content'>\n");
 }
 
-
-void cgit_print_snapshot_start(const char *mimetype, const char *filename,
-			       struct cacheitem *item)
-{
-	htmlf("Content-Type: %s\n", mimetype);
-	htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename);
-	htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));
-	htmlf("Expires: %s\n", http_date(item->st.st_mtime +
-					 ttl_seconds(item->ttl)));
-	html("\n");
-}
-
 void cgit_print_filemode(unsigned short mode)
 {
 	if (S_ISDIR(mode))
