diff --git a/favicon.ico b/favicon.ico
old mode 100755
new mode 100644
index c8deb9e..5c81ff0
Binary files a/favicon.ico and b/favicon.ico differ
diff --git a/images/touch-icon-h.png b/images/touch-icon-h.png
deleted file mode 100755
index 313206c..0000000
Binary files a/images/touch-icon-h.png and /dev/null differ
diff --git a/images/touch-icon-l.png b/images/touch-icon-l.png
deleted file mode 100755
index 313206c..0000000
Binary files a/images/touch-icon-l.png and /dev/null differ
diff --git a/images/touch-icon-m.png b/images/touch-icon-m.png
deleted file mode 100755
index 313206c..0000000
Binary files a/images/touch-icon-m.png and /dev/null differ
diff --git a/template.php b/template.php
index d241ca6..2e41e0e 100755
--- a/template.php
+++ b/template.php
@@ -70,6 +70,7 @@ function commons_origins_preprocess_html(&$vars) {
   global $theme_key;
 
   $site_name = variable_get('site_name', 'Commons');
+  $path = drupal_get_path('theme', 'commons_origins');
 
   if (strlen($site_name) > 23) {
     $vars['classes_array'][] = 'site-name-long-2-lines';
@@ -90,9 +91,31 @@ function commons_origins_preprocess_html(&$vars) {
   // Browser/platform sniff - adds body classes such as ipad, webkit, chrome etc.
   $vars['classes_array'][] = css_browser_selector();
 
+  // Add large icons for people that add shortcuts to browsers and home
+  // screens.
+  foreach (array('144x144', '114x114', '72x72', '57x57') as $size) {
+    drupal_add_html_head_link(array('rel' => 'apple-touch-icon-precomposed', 'sizes' => $size, 'href' => $path . '/touch-icons/apple-touch-icon-' . $size . '-precomposed.png'));
+  }
 }
-//
 
+/**
+ * Implements hook_html_head_alter().
+ */
+function commons_origins_html_head_alter(&$head_elements) {
+  // Set a base weight.
+  $weight = 10;
+  foreach ($head_elements as &$element) {
+    // The array of icons will render out of order if a weight is not applied.
+    // This will effect more than the icons, but it will also make the link
+    // elements nicely grouped in the markup.
+    if (isset($element['#tag']) && $element['#tag'] == 'link') {
+      $element['#weight'] = $weight;
+
+      // Increment the weight for the next item.
+      $weight++;
+    }
+  }
+}
 
 /**
  * Process variables for the html template.
diff --git a/touch-icons/apple-touch-icon-114x114-precomposed.png b/touch-icons/apple-touch-icon-114x114-precomposed.png
new file mode 100644
index 0000000..89c091a
Binary files /dev/null and b/touch-icons/apple-touch-icon-114x114-precomposed.png differ
diff --git a/touch-icons/apple-touch-icon-144x144-precomposed.png b/touch-icons/apple-touch-icon-144x144-precomposed.png
new file mode 100644
index 0000000..671d2d1
Binary files /dev/null and b/touch-icons/apple-touch-icon-144x144-precomposed.png differ
diff --git a/touch-icons/apple-touch-icon-57x57-precomposed.png b/touch-icons/apple-touch-icon-57x57-precomposed.png
new file mode 100644
index 0000000..5e88b02
Binary files /dev/null and b/touch-icons/apple-touch-icon-57x57-precomposed.png differ
diff --git a/touch-icons/apple-touch-icon-72x72-precomposed.png b/touch-icons/apple-touch-icon-72x72-precomposed.png
new file mode 100644
index 0000000..b1ed33d
Binary files /dev/null and b/touch-icons/apple-touch-icon-72x72-precomposed.png differ
