diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..36e0d1116875519624d80f6fad33c0526cd86c9c
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,2 @@
+#Options +Indexes +ExecCGI +Multiviews
+addhandler cgi-script .py
diff --git a/archive.html b/archive.html
new file mode 100755
index 0000000000000000000000000000000000000000..15226688003c57dec3142bdf5829ab7e05783402
--- /dev/null
+++ b/archive.html
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<!-- This is the new Javascript based webcams page by [PXY],
+     who was sick of the page reloads. Extra crack added by
+     [TRS], who wanted back and forward to work. -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+  <title>UCC Webcams @ Loading...</title>
+  <link rel="stylesheet" href="https://planet.ucc.asn.au/planet.css" type="text/css" media="screen" />
+  <link rel="stylesheet" href="webcam-overrides.css" type="text/css" media="screen" />
+  <script type="text/javascript" src="archive.js"></script>
+ </head>
+ <body onload="windowOnload()">
+<div class="header">
+<img alt="Planet UCC" id="pucc_logo"
+     src="//www.ucc.asn.au/images/ucc_logo.gif" />
+<div id="globalnav-wrapper">
+ <ul id="portal-globalnav">
+
+  <li id="portaltab-index_html" class="plain">
+   <a href="https://www.ucc.asn.au">Home</a>
+  </li>
+  <li id="portaltab-aboutucc" class="plain">
+   <a href="https://www.ucc.asn.au/aboutucc/">About Us</a>
+  </li>
+
+  <li id="portaltab-infobase" class="plain">
+
+   <a href="https://www.ucc.asn.au/infobase/">Information</a>
+  </li>
+  <li id="portaltab-services" class="plain">
+   <a href="https://www.ucc.asn.au/services/">Services</a>
+  </li>
+  <li id="portaltab-events" class="plain">
+   <a href="https://www.ucc.asn.au/infobase/events/">Events</a>
+
+  </li>
+  <li id="portaltab-planetucc" class="plain">
+   <a href="https://planet.ucc.asn.au/">Planet UCC</a>
+  </li>     
+  <li id="portaltab-planetucc" class="plain">
+   <a href="https://wiki.ucc.asn.au/">Wiki</a>
+  </li>     
+ </ul>
+</div>
+</div>
+<div class="items">
+  <h1 id="header">UCC Webcams @ Loading...</h1>
+  <div class="navMenu">
+    <a href="index.html">Live</a>
+    <a href="https://webcam.ucc.asn.au/clubroom-schematic.png">Map</a>
+  </div>
+  <div class=camSection>
+    <div class="camera" id="webcam4"><img alt="BW Webcam" /></div>
+    <div class="camera" id="webcam3"><img alt="Webcam 3" /></div>
+    <div class="camera" id="webcam2"><img alt="Webcam 1" /></div>
+    <div class="camera" id="uvc1"><img alt="UVC 1" /></div>
+    <div class="camera" id="webcam1"><img alt="Webcam 2" /></div>
+    <div class="camera" id="ipcamera1"><img alt="IPCamera1" /></div>
+    <div class="camera" id="ipcamera2"><img alt="IPCamera2" /></div>
+    <div class="camera" id="ipcamera3"><img alt="IPCamera3" /></div>
+    <div class="camera" id="ipcamera4"><img alt="IPCamera4" /></div>
+    <div class="camera" id="ipcamera5"><img alt="IPCamera5" /></div>    
+    <div class="camera" id="ipcamera7"><img alt="IPCamera7" /></div>    
+    <div class="camera" id="ipcamera6"><img alt="IPCamera6" /></div>    
+    <div class="camera" id="ipcamera9"><img alt="IPCamera9" /></div>    
+    <div class="camera" id="ipcamera10"><img alt="IPCamera10" /></div>    
+    <div class="camera" id="ipcamera8"><img alt="IPCamera8" /></div>
+  </div>
+  <div class="nav">
+  <table width="100%">
+    <tr>
+      <td>
+
+	  &laquo; Back<br />
+<a href="javascript:setMinutes(-30)">30</a>&nbsp; 
+<a href="javascript:setMinutes(-10)">10</a>&nbsp; 
+<a href="javascript:setMinutes(-5)">5</a>&nbsp; 
+<a href="javascript:setMinutes(-2)">2</a>&nbsp; 
+<a href="javascript:setMinutes(-1)">1</a>&nbsp; 
+minutes
+<br />
+<a href="javascript:setDays(-10)">10</a>&nbsp; 
+<a href="javascript:setDays(-7)">7</a>&nbsp; 
+<a href="javascript:setDays(-5)">5</a>&nbsp; 
+<a href="javascript:setDays(-2)">2</a>&nbsp; 
+<a href="javascript:setDays(-1)">1</a>&nbsp; 
+days
+<a href="javascript:setHours(-6)">6</a>&nbsp; 
+<a href="javascript:setHours(-2)">2</a>&nbsp; 
+<a href="javascript:setHours(-1)">1</a>&nbsp; 
+hours&nbsp;
+
+	</td>
+<td align="middle">
+	  Time Index: <a id="timeindex" href="">Loading...</a><br />
+	  <a href="javascript:setDateNow()">Now</a> 
+	  (<a href="index.html">Live</a>)
+	</td>
+
+	<td align="right">
+	  Forward &raquo;<br />
+
+<a href="javascript:setMinutes(1)">1</a>&nbsp; 
+<a href="javascript:setMinutes(2)">2</a>&nbsp; 
+<a href="javascript:setMinutes(5)">5</a>&nbsp; 
+<a href="javascript:setMinutes(10)">10</a>&nbsp; 
+<a href="javascript:setMinutes(30)">30</a>&nbsp; 
+minutes
+<br />
+<a href="javascript:setHours(1)">1</a>&nbsp; 
+<a href="javascript:setHours(2)">2</a>&nbsp; 
+<a href="javascript:setHours(6)">6</a>&nbsp; 
+hours&nbsp;
+<a href="javascript:setDays(1)">1</a>&nbsp; 
+<a href="javascript:setDays(2)">2</a>&nbsp; 
+<a href="javascript:setDays(5)">5</a>&nbsp; 
+<a href="javascript:setDays(7)">7</a>&nbsp; 
+<a href="javascript:setDays(10)">10</a>&nbsp; 
+days
+
+	</td>
+      </tr>
+    </table>
+      <form>
+	<p align="middle" style="padding:0; margin:0;">
+	  <span id="nav-dayname">...</span>
+	  <select onChange="navDate()" id="nav-day"></select>
+	  <select onChange="navDate()" id="nav-month"></select>
+	  <select onChange="navDate()" id="nav-year"></select>,
+	  <select onChange="navDate()" id="nav-hour"></select>:
+	  <select onChange="navDate()" id="nav-minute"></select>
+	</p>
+
+      </form></div>
+</div>
+<div class="footer">
+  <p>Copyright 1993-2014, The University Computer Club Inc.
+  &lt;<a href="mailto:webmasters@ucc">webmasters@ucc</a>&gt;<br />
+  Written to be <a href="http://www.w3.org/">specifications compliant</a>.
+  </p>
+  <p class="logos" style="text-align: center;">
+    <a href="https://www.ucc.asn.au">
+    <img style="padding-bottom:1ex;" src="https://www.ucc.asn.au/images/ucc-sun-logo-black.png" alt="UCC" title="University Computer Club" />
+    </a>
+    <img alt="Hacking Life" title="Hacking Life" style="padding-bottom:1ex;" src="https://www.ucc.asn.au/images/glider.png" />
+    <a href="https://www.gu.uwa.edu.au">
+    <img alt="Guide of Undergraduates" title="UWA Guild of Undergraduates" style="padding-bottom:1ex;" src="https://www.ucc.asn.au/images/guild/spot2001-blue.png" />
+    </a>
+    <a href="https://www.uwa.edu.au">
+    <img alt="University of Western Australia" title="University of Western Australia" src="https://www.ucc.asn.au/images/uwa_crest.png" />
+    </a>
+  </p>
+</div>
+
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-11604699-2', 'auto');
+  ga('send', 'pageview');
+
+</script>
+ </body>
+</html>
diff --git a/archive.js b/archive.js
new file mode 100755
index 0000000000000000000000000000000000000000..9546c86411cb999bada6b8e083fe6b51ce3e0b45
--- /dev/null
+++ b/archive.js
@@ -0,0 +1,337 @@
+var d;
+var months = new Array ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
+var days = new Array ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
+
+function windowOnload()
+{
+	// set the initial date from the server
+        // get an XML HTTP Request object
+        var req = false;
+        try
+        {
+                req = new XMLHttpRequest ();
+        }
+        catch (e)
+        {
+                try
+                {
+                        req = new ActiveXObject ("Microsoft.XMLHTTP");
+                }
+                catch (e)
+                {
+                }
+        }
+
+        if (req)
+        {
+                req.onreadystatechange = function ()
+                {
+                        if (req.readyState == 4)
+                        {
+				d = new Date (Date.parse (req.getResponseHeader ("Date")));
+	
+				if (location.hash.length > 0)
+				{
+					d.setTime (location.hash.substring(1, location.hash.length));
+				}
+				else
+				{
+					d.setMinutes(d.getMinutes() - 1);
+				}
+				setupPage();
+				setDate();
+                        }
+
+                };
+
+		var timestamp = new Date ();
+                req.open ("HEAD", "index.html?" + timestamp.getTime (), true);
+                req.send ("");
+        }
+}
+
+function setDateNow()
+{
+	// get a new date from the server
+        // get an XML HTTP Request object
+        var req = false;
+        try
+        {
+                req = new XMLHttpRequest ();
+        }
+        catch (e)
+        {
+                try
+                {
+                        req = new ActiveXObject ("Microsoft.XMLHTTP");
+                }
+                catch (e)
+                {
+                }
+        }
+
+        if (req)
+        {
+                req.onreadystatechange = function ()
+                {
+                        if (req.readyState == 4)
+                        {
+				d = new Date (Date.parse (req.getResponseHeader ("Date")));
+	
+				d.setMinutes(d.getMinutes() - 1);
+				setDate();
+				alignSelects();
+                        }
+
+                };
+
+		var timestamp = new Date ();
+                req.open ("HEAD", "index.html?" + timestamp.getTime (), true);
+                req.send ("");
+        }
+}
+
+function setupPage()
+{
+	var form;
+	var i;
+
+	document.getElementById("nav-dayname").firstChild.data = days[d.getDay()];
+	form = document.getElementById("nav-day");
+	for (i = 0; i < 31; i++)
+	{
+		form[i] = new Option(i+1,i+1,(d.getDate() == i+1));
+	}
+	form = document.getElementById("nav-month");
+	for (i = 0; i < 12; i++)
+	{
+		form[i] = new Option(months[i],i,(d.getMonth() == i));
+	}
+	form = document.getElementById("nav-year");
+	for (i = 2003; i < d.getFullYear() + 1; i++)
+	{
+		form[i-2003] = new Option(i,i,(d.getFullYear() == i));
+	}
+	form = document.getElementById("nav-hour");
+	for (i = 0; i < 24; i++)
+	{
+		form[i] = new Option(zPad(i.toString()),i,(d.getHours() == i));
+	}
+	form = document.getElementById("nav-minute");
+	for (i = 0; i < 60; i++)
+	{
+		form[i] = new Option(zPad(i.toString()),i,(d.getMinutes() == i));
+	}
+}
+
+function alignSelects()
+{
+	var form;
+	var i;
+	
+	form = document.getElementById("nav-day");
+	for (i = 0; i < 31; i++)
+	{
+		if (d.getDate() == i+1)
+		{
+			form[i].selected = true;
+		}
+		else
+		{
+			form[i].selected = false;
+		}
+	}
+	form = document.getElementById("nav-month");
+	for (i = 0; i < 12; i++)
+	{
+		if (d.getMonth() == i)
+		{
+			form[i].selected = true;
+		}
+		else
+		{
+			form[i].selected = false;
+		}
+	}
+	form = document.getElementById("nav-year");
+	for (i = 2003; i < d.getFullYear() + 1; i++)
+	{
+		if (d.getFullYear() == i)
+		{
+			form[i-2003].selected = true;
+		}
+		else
+		{
+			form[i-2003].selected = false;
+		}
+	}
+	form = document.getElementById("nav-hour");
+	for (i = 0; i < 24; i++)
+	{
+		if (d.getHours() == i)
+		{
+			form[i].selected = true;
+		}
+		else
+		{
+			form[i].selected = false;
+		}
+	}
+	form = document.getElementById("nav-minute");
+	for (i = 0; i < 60; i++)
+	{
+		if (d.getMinutes() == i)
+		{
+			form[i].selected = true;
+		}
+		else
+		{
+			form[i].selected = false;
+		}
+	}
+}
+
+function navDate()
+{
+	d.setDate(document.getElementById("nav-day").value);
+	d.setMonth(document.getElementById("nav-month").value);
+	d.setFullYear(document.getElementById("nav-year").value);
+	d.setHours(document.getElementById("nav-hour").value);
+	d.setMinutes(document.getElementById("nav-minute").value);
+
+	setDate();
+}
+
+function zPad(str)
+{
+	if (str.length == 1)
+	{
+		str = "0" + str;
+	}
+	return str;
+}
+
+function setAlt (img, text)
+{
+	var lines = img.alt.split ("\n");
+	if (lines.length > 0)
+	{
+		img.alt = lines[0] + "\n" + text;
+	}
+	else
+	{
+		img.alt += "\n" + text;
+	}
+}
+
+function updateWebcam (webcamid, webcamurl)
+{
+		var div = document.getElementById (webcamid);
+        var img = div.getElementsByTagName('img')[0];
+
+        // get an XML HTTP Request object
+        var req = false;
+        try
+        {
+                req = new XMLHttpRequest ();
+        }
+        catch (e)
+        {
+                try
+                {
+                        req = new ActiveXObject ("Microsoft.XMLHTTP");
+                }
+                catch (e)
+                {
+                }
+        }
+
+        if (req)
+        {
+                req.onreadystatechange = function ()
+                {
+                        if (req.readyState == 4)
+                        {
+                                if (req.status == 200 || req.status == 304)
+				{
+					//img.parentNode.style.backgroundColor = "transparent";
+					div.style.display = 'inline-block';
+					//setAlt (img, "");
+                                }
+				else
+				{
+					div.style.display = 'none';
+					//img.parentNode.style.backgroundColor = "darkred";
+					//setAlt (img, "(status " + req.status + ")");
+				}
+                        }
+
+                };
+
+                req.open ("HEAD", webcamurl, true);
+                req.send ("");
+        }
+
+        // set the image
+        img.setAttribute ("src",webcamurl);
+}
+
+
+function setDate()
+{
+	window.location.hash = d.getTime();
+	//document.getElementById("timeremaining").firstChild.data = "loading...";
+
+	var timeString = days[d.getDay()]+" "+d.getDate()+" "+months[d.getMonth()]+" "+d.getFullYear()+", "+zPad(d.getHours().toString())+":"+zPad(d.getMinutes().toString());
+	document.title = "UCC Webcams @ "+timeString;
+	document.getElementById("header").firstChild.data = "UCC Webcams @ "+timeString;
+	document.getElementById("timeindex").firstChild.data = d.getTime();
+	document.getElementById("timeindex").href = "#"+d.getTime();
+
+	document.getElementById("nav-dayname").firstChild.data = days[d.getDay()];
+
+	var image = d.getFullYear()+zPad((d.getMonth()+1).toString())+"/"+zPad(d.getDate().toString())+"/"+zPad(d.getHours().toString())+"/"+zPad(d.getMinutes().toString())+".jpg";
+	updateWebcam ("webcam1", "/archive/colour/" + image);
+	//updateWebcam ("webcam1-datetime", "/archive/colour/" + image);
+	updateWebcam ("webcam2", "/archive/colour1/" + image);
+	updateWebcam ("webcam3", "/archive/colour3/" + image);
+	updateWebcam ("webcam4", "/archive/bw/" + image);
+	updateWebcam ("uvc1", "/archive/uvc1/" + image);
+	updateWebcam ("ipcamera1", "/archive/ipcamera1/" + image);
+	updateWebcam ("ipcamera2", "/archive/ipcamera2/" + image);
+	updateWebcam ("ipcamera3", "/archive/ipcamera3/" + image);
+	updateWebcam ("ipcamera4", "/archive/ipcamera4/" + image);
+	updateWebcam ("ipcamera5", "/archive/ipcamera5/" + image);
+	updateWebcam ("ipcamera6", "/archive/ipcamera6/" + image);
+	updateWebcam ("ipcamera9", "/archive/ipcamera9/" + image);
+	updateWebcam ("ipcamera10", "/archive/ipcamera10/" + image);
+	updateWebcam ("ipcamera7", "/archive/ipcamera7/" + image);
+        updateWebcam ("ipcamera8", "/archive/ipcamera8/" + image);
+	//setTimeout("clearText()",1000);
+}
+
+function setMinutes(mins)
+{
+	d.setMinutes(d.getMinutes() + mins);
+	setDate();
+	alignSelects();
+}
+
+function setHours(hours)
+{
+	d.setHours(d.getHours() + hours);
+	setDate();
+	alignSelects();
+}
+
+function setDays(days)
+{
+	d.setDate(d.getDate() + days);
+	setDate();
+	alignSelects();
+}
+
+function clearText()
+{
+	document.getElementById("timeremaining").firstChild.data = "";
+}
diff --git a/archive.php b/archive.php
new file mode 100755
index 0000000000000000000000000000000000000000..f1841897a4f2a429574db90edee796ce088d42e9
--- /dev/null
+++ b/archive.php
@@ -0,0 +1,44 @@
+<?php
+	// Need to update this script to make it work. Working on the live feed
+	// first
+
+
+	// list of approved cameras
+	// (to avoid filesytem traversal, etc
+
+	$approved = array(
+		"bw",
+		"colour",
+		"colour1",
+		"colour3",
+		"ipcamera1",
+		"ipcamera10",
+		"ipcamera2",
+		"ipcamera3",
+		"ipcamera4",
+		"ipcamera5",
+		"ipcamera6",
+		"ipcamera7",
+		"ipcamera8",
+		"ipcamera9",
+		"unigames",
+		"uvc1",
+	);
+
+	$camera = ($_GET['camera']?$_GET['camera']:'nocamera');
+
+	// check camera is approved - mtearle
+	if (!in_array($camera,$approved))
+		$camera = 'nocamera';
+
+	$imagelocation="archive/";
+	$file = $imagelocation.strtolower($camera).".jpg";
+	header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
+	if (!is_readable($file)) {
+		$file="nocamera.jpg";
+	}
+	header("Content-Type: image/jpeg");
+	header("Content-Length: ".filesize($file));
+	header("Last-Modified: ".gmdate("D, d M Y H:i:s", filectime($file))." GMT");
+	passthru("cat $file");
+?>
diff --git a/camera.php b/camera.php
new file mode 100755
index 0000000000000000000000000000000000000000..72f6b9074913039d69df5a51cb573694d7546478
--- /dev/null
+++ b/camera.php
@@ -0,0 +1,52 @@
+<?php
+
+	// list of approved cameras
+	// (to avoid filesytem traversal, etc
+
+	$approved = array(
+		"bw",
+		"colour",
+		"colour1",
+		"colour3",
+		"ipcamera1",
+		"ipcamera10",
+		"ipcamera2",
+		"ipcamera3",
+		"ipcamera4",
+		"ipcamera5",
+		"ipcamera6",
+		"ipcamera7",
+		"ipcamera8",
+		"ipcamera9",
+		"unigames",
+		"uvc1",
+	);
+	$camera = 'nocamera';
+	if (isset($_GET['camera']) )
+		$camera=$_GET['camera'];
+
+	// check camera is approved - mtearle
+	if (!in_array($camera,$approved))
+		$camera = 'nocamera';
+
+	$imagelocation="../";
+	$file = $imagelocation.strtolower($camera).".jpg";
+	$statusfile = $imagelocation.strtolower($camera).".status";
+	//echo date('i');
+	//echo substr(date('i'), 1, 1);	
+	//echo $file;
+
+	header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
+	if (!is_readable($file)) {
+		$file="nocamera.jpg";
+	}
+	if (file_exists($statusfile))
+		usleep(250000);
+	header("Content-Type: image/jpeg");
+	header("Content-Length: ".filesize($file));
+	$fps = stat($file);
+	header("Last-Modified: ".gmdate("D, d M Y H:i:s", $fps[9])." GMT");
+	$fp = fopen($file, 'rb');
+	fpassthru($fp);
+	fclose($fp);
+?>
diff --git a/index.html b/index.html
new file mode 100755
index 0000000000000000000000000000000000000000..b30887f5e1862e744c328226e02414b14fce947c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<!-- This is the new Javascript based webcams page by [PXY],
+     who was sick of the page reloads -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+  <title>UCC Webcams</title>
+  <noscript>
+   <meta http-equiv="refresh" content="10;" />
+  </noscript>
+  <link rel="stylesheet" href="https://secure.ucc.asn.au/~planet/planet.css" type="text/css" media="screen" />
+  <link rel="stylesheet" href="webcam-overrides.css" type="text/css" media="screen" />
+  <script type="text/javascript" src="webcams.js"></script>
+</head>
+ <body onload="windowOnload()">
+<div class="header">
+<img alt="Planet UCC" id="pucc_logo"
+     src="https://www.ucc.asn.au/images/ucc_logo.gif" />
+<div id="globalnav-wrapper">
+ <ul id="portal-globalnav">
+
+  <li id="portaltab-index_html" class="plain">
+   <a href="https://www.ucc.asn.au">Home</a>
+  </li>
+  <li id="portaltab-aboutucc" class="plain">
+   <a href="https://www.ucc.asn.au/aboutucc/">About Us</a>
+  </li>
+
+  <li id="portaltab-infobase" class="plain">
+
+   <a href="https://www.ucc.asn.au/infobase/">Information</a>
+  </li>
+  <li id="portaltab-services" class="plain">
+   <a href="https://www.ucc.asn.au/services/">Services</a>
+  </li>
+  <li id="portaltab-events" class="plain">
+   <a href="http://wiki.ucc.asn.au/Events/">Events</a>
+
+  </li>
+  <li id="portaltab-planetucc" class="plain">
+   <a href="//planet.ucc.asn.au/">Planet UCC</a>
+  </li>     
+  <li id="portaltab-planetucc" class="plain">
+   <a href="http://wiki.ucc.asn.au/">Wiki</a>
+  </li>     
+ </ul>
+</div>
+</div>
+<div class="items">
+ <h1>UCC Webcams</h1>
+ <div class="navMenu">
+  <a href="archive.html">Archive</a>
+  <a href="https://webcam.ucc.asn.au/clubroom-schematic.png">Map</a>
+ </div>
+</div>
+<div class=camSection>
+  <div class="camera"><a href="camera.php?camera=ipcamera1"><img id="ipcamera1" alt="IPCamera1" src="camera.php?camera=ipcamera1"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera2"><img id="ipcamera2" alt="IPCamera2" src="camera.php?camera=ipcamera2"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera3"><img id="ipcamera3" alt="IPCamera3" src="camera.php?camera=ipcamera3"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera4"><img id="ipcamera4" alt="IPCamera4" src="camera.php?camera=ipcamera4"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera5"><img id="ipcamera5" alt="IPCamera5" src="camera.php?camera=ipcamera5"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera7"><img id="ipcamera7" alt="IPCamera7" src="camera.php?camera=ipcamera7"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera6"><img id="ipcamera6" alt="IPCamera6" src="camera.php?camera=ipcamera6"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera9"><img id="ipcamera9" alt="IPCamera9" src="camera.php?camera=ipcamera9"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera10"><img id="ipcamera10" alt="IPCamera10" src="camera.php?camera=ipcamera10"/></a></div>
+ <div class="camera"><a href="camera.php?camera=ipcamera8"><img id="ipcamera8" alt="IPCamera8" src="camera.php?camera=ipcamera8"/></a></div>
+</div>
+<div class="footer">
+  <p><small>Copyright 1993-<span id="copyright">2014</span>, The University Computer Club Inc.
+  &lt;<a href="mailto:webmasters@ucc">webmasters@ucc</a>&gt;<br />
+  Written to be <a href="https://www.w3.org/">specifications compliant</a>.
+  </small></p>
+  <!--<p class="logos" style="text-align: center;">
+    <a href="http://www.ucc.asn.au">
+    <img style="padding-bottom:1ex;" src="//www.ucc.asn.au/images/ucc-sun-logo-black.png" alt="UCC" title="University Computer Club" />
+    </a>
+    <a href="http://www.gu.uwa.edu.au">
+    <img alt="Guild of Undergraduates" title="UWA Guild of Undergraduates" style="padding-bottom:1ex;" src="//www.ucc.asn.au/images/guild/spot2001-blue.png" />
+    </a>
+    <a href="http://www.uwa.edu.au">
+    <img alt="University of Western Australia" title="University of Western Australia" src="//www.ucc.asn.au/images/uwa_crest.png" />
+    </a>
+  </p>-->
+</div>
+<script type="text/javascript">
+	/*var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+	document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));*/
+</script>
+<script type="text/javascript">
+	/*try {
+		var pageTracker = _gat._getTracker("UA-11604699-1");
+		pageTracker._setDomainName("none");
+		pageTracker._setAllowLinker(true);
+		pageTracker._trackPageview();
+	} catch(err) {}*/
+</script>
+<script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-11604699-2', 'auto');
+  ga('send', 'pageview');
+
+</script>
+</body>
+</html>
diff --git a/robots.txt b/robots.txt
new file mode 100755
index 0000000000000000000000000000000000000000..51f89e7e773ab51cbf8c0fbf299c20bcdaf52073
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,5 @@
+User-agent: sitecheck.internetseer.com
+Disallow: /
+
+User-agent: *
+Disallow: /
diff --git a/webcam-overrides.css b/webcam-overrides.css
new file mode 100755
index 0000000000000000000000000000000000000000..d7d64a832e4327816d566aabc1661dfc2d49f893
--- /dev/null
+++ b/webcam-overrides.css
@@ -0,0 +1,80 @@
+.camsection{
+	font-size: 0;
+}
+.camera {
+	width: 465px;
+	height: 349px;
+	margin: 0px;
+	overflow: hidden;
+	/*padding: 20px;*/
+	margin-left: auto;
+	margin-right: auto;
+	display: inline-block;
+	font-size: 0;
+}
+
+.camera img {
+	display: block;
+	max-width: 100%
+}
+
+.header {
+	background: none;
+}
+
+.camSection {
+	margin-left:auto;
+	margin-right:auto;
+	text-align: center;
+}
+
+body {
+	padding-bottom: 4.5em;
+}
+
+.offline {
+	/*opacity: 0.1;*/
+}
+
+/* Haven't touched anything below this */
+
+/*the navigation stuff for the archives page*/
+div.nav {
+  position: fixed;
+  z-index: 3;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  width: 100%;
+  background-color:#ffce7b;
+  border-top:1px solid #ffa500;
+  padding: 0.2ex;
+  padding-bottom: 0.7ex;
+}
+
+div.nav table {
+  font-size: 75%;
+  width: 100%;
+  padding: 0;
+  border-spacing: 0;
+}
+div.nav form {
+  margin-bottom: 0;
+}
+
+.navMenu {
+  margin-left:20px;
+}
+
+.navMenu a {
+  padding-right:5px;
+}
+.navMenu a:visited { color:#00E; }
+
+/*
+gets around planet making room on the right for the sidebar
+Really need a generic res.ucc css file that we add to instead of subtract from
+*/
+.items {
+  padding-right: 0;
+}
diff --git a/webcams.js b/webcams.js
new file mode 100755
index 0000000000000000000000000000000000000000..c84f34b382f0f9426914a69f5c26db5e04b814c0
--- /dev/null
+++ b/webcams.js
@@ -0,0 +1,78 @@
+function windowOnload()
+{
+	updateTime();
+	setInterval("updateTime()", 15000);
+}
+
+function updateWebcam (webcamid, webcamurl)
+{
+	var date = new Date ();
+	var fullwebcamurl = webcamurl + "&t" + date.getTime ();
+	var img = document.getElementById(webcamid);
+
+	// get an XML HTTP Request object
+	var req = false;
+	try
+	{
+		req = new XMLHttpRequest ();
+	}
+	catch (e)
+	{
+		try
+		{
+			req = new ActiveXObject ("Microsoft.XMLHTTP");
+		}
+		catch (e)
+		{
+		}
+	}
+
+	if (req)
+	{
+		req.onreadystatechange = function ()
+		{
+			if (req.readyState == 4)
+			{
+				if (req.status == 200 || req.status == 304)
+				{
+					var imgdate = new Date (Date.parse (req.getResponseHeader ("Last-Modified")));
+					var servdate = new Date (Date.parse (req.getResponseHeader ("Date")));
+					if (Math.abs (imgdate.getTime () - servdate.getTime ()) > 1000 * 60 * 3)
+					{
+						console.log("Out Of Sync");
+						console.log("imgdate: " + imgdate);
+						console.log("servdate: " + servdate);
+						// this image is out of date
+						img.classList.add('offline');
+					}
+					else
+					{
+						//console.log("In Sync");
+						img.classList.remove('offline');
+					}
+				}
+			}
+			
+		};
+
+		req.open ("HEAD", fullwebcamurl, true);
+		req.send ("");
+	}
+	// set the image
+	//img.src = "http://www.ucc.asn.au/~webcam/" + fullwebcamurl;
+	img.src = fullwebcamurl;
+}
+
+function updateTime()
+{
+	var date = new Date ();
+	updateWebcam ("ipcamera1", "camera.php?camera=ipcamera1");
+	updateWebcam ("ipcamera2", "camera.php?camera=ipcamera2");
+	updateWebcam ("ipcamera3", "camera.php?camera=ipcamera3");
+	updateWebcam ("ipcamera4", "camera.php?camera=ipcamera4");
+	updateWebcam ("ipcamera5", "camera.php?camera=ipcamera5");
+	updateWebcam ("ipcamera6", "camera.php?camera=ipcamera6");
+	updateWebcam ("ipcamera9", "camera.php?camera=ipcamera9");
+	updateWebcam ("ipcamera10", "camera.php?camera=ipcamera10");
+	updateWebcam ("ipcamera7", "camera.php?camera=ipcamera7");
+        updateWebcam ("ipcamera8", "camera.php?camera=ipcamera8");}