diff --git a/main.go b/main.go
index 75b18bd6de27793ee179da42aed710b932a1284c..76b21a87c8dd7e415afb03507b3647c40f28575f 100644
--- a/main.go
+++ b/main.go
@@ -96,7 +96,13 @@ type UploadData struct {
 }
 
 func returnResult(w http.ResponseWriter, templateName string, data interface{}) error {
-	pageTemplate, err := template.New(templateName).ParseFiles(fmt.Sprintf("templates/%s", templateName))
+	pageTemplate, err := template.ParseFiles(
+		"templates/_base.html",
+		"templates/_header.html",
+		"templates/_navigation.html",
+		"templates/_footer.html",
+		fmt.Sprintf("templates/%s", templateName),
+	)
 	if err != nil {
 		return err
 	}
diff --git a/templates/_base.html b/templates/_base.html
new file mode 100644
index 0000000000000000000000000000000000000000..9bab238305238fd1fd8e0ee8b9228975c01f09d8
--- /dev/null
+++ b/templates/_base.html
@@ -0,0 +1,4 @@
+{{template "header" .}}
+{{template "navigation" .User}}
+{{template "content" .}}
+{{template "footer" .}}
\ No newline at end of file
diff --git a/templates/_footer.html b/templates/_footer.html
new file mode 100644
index 0000000000000000000000000000000000000000..c4a5da502948e69642651c0c537856c4580ca0be
--- /dev/null
+++ b/templates/_footer.html
@@ -0,0 +1,2 @@
+{{ define "footer"}}
+{{end}}
\ No newline at end of file
diff --git a/templates/_header.html b/templates/_header.html
new file mode 100644
index 0000000000000000000000000000000000000000..affb6864f0130fe8aad8138b69c67da801aeea7b
--- /dev/null
+++ b/templates/_header.html
@@ -0,0 +1,7 @@
+{{define "header"}}
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>{{ template "title" .}}</title>
+<link href="/assets/css/style.css" rel="stylesheet">
+<link href="/assets/css/fonts.css" rel="stylesheet">
+{{end}}
\ No newline at end of file
diff --git a/templates/_navigation.html b/templates/_navigation.html
new file mode 100644
index 0000000000000000000000000000000000000000..56cebab1af934a470981bc77adc7ea8724b42837
--- /dev/null
+++ b/templates/_navigation.html
@@ -0,0 +1,10 @@
+{{ define "navigation" }}
+{{ if .Id }}
+<p>Welcome, {{ .Name }}</p>
+<p>
+    <a href="/me/images">My Images</a> |
+    <a href="/me/albums">My Albums</a> |
+    <a href="/upload">Upload</a>
+</p>
+{{ end }}
+{{ end}}
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
index 9574e78ff1367459a0453fc84b4fc5fb83c1cf92..359073073fac13ebfe2205b92d13e20c91903ae4 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,14 +1,2 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>ik8r</title>
-<link href="/assets/css/style.css" rel="stylesheet">
-<link href="/assets/css/fonts.css" rel="stylesheet">
-
-{{ if .User.Id }}
-    <p>Welcome, {{ .User.Name }}</p>
-    <p>
-        <a href="/me/images">My Images</a> |
-        <a href="/me/albums">My Albums</a> |
-        <a href="/upload">Upload</a>
-    </p>
-{{ end }}
\ No newline at end of file
+{{define "title"}}ik8r{{end}}
+{{define "content"}}{{end}}
\ No newline at end of file
diff --git a/templates/me_images.html b/templates/me_images.html
index 91dc7ae307b783288b052267b6fc174dadcc34e3..ac8a629af95a6578f439e6c1b521d2aca78da2cb 100644
--- a/templates/me_images.html
+++ b/templates/me_images.html
@@ -1,27 +1,17 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>My Images | ik8r</title>
-<link href="/assets/css/style.css" rel="stylesheet">
-<link href="/assets/css/fonts.css" rel="stylesheet">
-
-<p>Welcome, {{ .User.Name }}</p>
-<p>
-    <a href="/me/images">My Images</a> |
-    <a href="/me/albums">My Albums</a> |
-    <a href="/upload">Upload</a>
-</p>
-
+{{define "title"}}My Images | ik8r{{end}}
+{{define "content"}}
 <div class="images">
-    {{ range .Images }}
-        <a class="image" href="/i/{{ .Id }}">
-            <div class="image-container">
-              <img src="/i/{{ .Id }}t" >
-            </div>
-            <div class="info">
-              <p>{{ .OriginalName }}</p>
-              <p><time>{{ .CreatedAt.Format "2006-01-02 15:04" }}</time></p>
-              <p>{{ .MimeType }}</p>
-            </div>
-        </a>
-    {{ end }}
-</div>
\ No newline at end of file
+{{ range .Images }}
+    <a class="image" href="/i/{{ .Id }}">
+        <div class="image-container">
+            <img src="/i/{{ .Id }}t" >
+        </div>
+        <div class="info">
+            <p>{{ .OriginalName }}</p>
+            <p><time>{{ .CreatedAt.Format "2006-01-02 15:04" }}</time></p>
+            <p>{{ .MimeType }}</p>
+        </div>
+    </a>
+{{ end }}
+</div>
+{{end}}
\ No newline at end of file
diff --git a/templates/upload.html b/templates/upload.html
index 3663ee56730dc1f4a245f4f0876ee8446ba613ae..215c1306d64b4057d6de189636cf1cfe1e67ee80 100644
--- a/templates/upload.html
+++ b/templates/upload.html
@@ -1,16 +1,5 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Upload | ik8r</title>
-<link href="/assets/css/style.css" rel="stylesheet">
-<link href="/assets/css/fonts.css" rel="stylesheet">
-
-<p>Welcome, {{ .User.Name }}</p>
-<p>
-    <a href="/me/images">My Images</a> |
-    <a href="/me/albums">My Albums</a> |
-    <a href="/upload">Upload</a>
-</p>
-
+{{define "title"}}Upload | ik8r{{end}}
+{{define "content"}}
 {{ range .Results }}
 {{ if .Success }}
 <div class="info success">
@@ -29,4 +18,5 @@
 <form action="/upload/" method="POST" enctype="multipart/form-data">
     <input type="file" name="file" accept="image/jpeg,image/png,image/bmp,*.jpeg,*.jpg,*.png,*.bmp" multiple/>
     <input type="submit"/>
-</form>
\ No newline at end of file
+</form>
+{{end}}
\ No newline at end of file