diff --git a/site.inc b/site.inc
index ba07b70..3b46e5d 100644
--- a/site.inc
+++ b/site.inc
@@ -13,7 +13,7 @@ class site {
   var $front_page;
   var $menu_primary_links;
   var $menu_secondary_links;
-  
+
   function __construct($title = '', $purl_prefix = '', $front_page = '', $mpl = '', $msl = '', $sid = NULL) {
     $this->title = $title;
     $this->purl_prefix = $purl_prefix;
@@ -22,7 +22,7 @@ class site {
     $this->menu_secondary_links = $msl;
     $this->sid = $sid;
   }
-  
+
   function save() {
     if($this->sid == NULL) {
       if(count(_sites_get_sites()) == 0) {
@@ -36,12 +36,13 @@ class site {
     else {
       drupal_write_record('sites', $this, 'sid');
     }
-    
+
     $modifier = array(
       'provider' => 'sites',
       'id' => $this->sid,
       'value' => $this->purl_prefix,
     );
+
     purl_save($modifier);
   }
-}
\ No newline at end of file
+}
diff --git a/sites.admin.inc b/sites.admin.inc
index f336412..abbb294 100644
--- a/sites.admin.inc
+++ b/sites.admin.inc
@@ -7,15 +7,15 @@
  */
 function sites_list_sites() {
   $output = '<ul>';
-  
+
   $sites = _sites_get_sites();
   foreach($sites as $sid => $site) {
-      $output .= "<li><a href=\"/admin/build/sites/edit/$sid\">$site->title</a></li>";
+      $output .= "<li>" . l($site->title, 'admin/build/sites/edit/' . $site->sid) . "</li>";
   }
-  
+
   $output .= '</ul>';
-  $output .= '<a href="/admin/build/sites/add">Add a new site</a>';
-  
+  $output .= l(t('Add a new site'), 'admin/build/sites/add');
+
   return $output;
 }
 
@@ -30,15 +30,15 @@ function sites_site_form(&$form_state, $site_id = NULL) {
   else {
       $site = _sites_get_site($site_id);
   }
-  
+
   $form = array();
-  
+
   $form['sitename'] = array(
     '#title' => 'Site name',
     '#type' => 'textfield',
     '#default_value' => $site->title,
   );
-  
+
   $form['front_page'] = array(
     '#title' => 'Front page',
     '#description' => 'Leave blank to use sitewide frontpage',
@@ -59,20 +59,26 @@ function sites_site_form(&$form_state, $site_id = NULL) {
     '#type' => 'textfield',
     '#default_value' => $site->menu_secondary_links,
   );
-  
+
   // Add context prefix form
   $form['purl'] = purl_form('sites', $site_id, $site->purl_prefix);
-  
+
   $form['site_id'] = array(
     '#type' => 'hidden',
     '#value' => $site_id,
   );
-  
+
   $form['submit'] = array(
     '#value' => 'Submit',
     '#type' => 'submit',
   );
-  
+
+  if ($site_id) {
+    $form['delete'] = array(
+      '#value' => l('Delete','admin/build/sites/delete/' . $site_id),
+    );
+  }
+
   return $form;
 }
 
@@ -86,17 +92,40 @@ function sites_site_form_submit($form, &$form_state) {
   else {
     $site = _sites_get_site($form_state['values']['site_id']);
   }
-  
+
   $site->title = $form_state['values']['sitename'];
   $site->front_page = $form_state['values']['front_page'];
   $site->menu_primary_links = $form_state['values']['primary_links'];
   $site->menu_secondary_links = $form_state['values']['secondary_links'];
- 
+
   if (isset($form_state['values']['purl']['value'])) {
     $site->purl_prefix = $form_state['values']['purl']['value'];
   }
-  
+
   $site->save();
 }
 
+function sites_site_delete_form($form_state, $site_id) {
+  $site = _sites_get_site($site_id);
+  if (!$site) {
+    drupal_goto('admin/build/sites');
+    return;
+  }
+
+  $form = array();
+  $form['site_id'] = array(
+    '#type' => 'value',
+    '#value' => $site_id
+  );
 
+  $form = confirm_form($form, t('Do you want to delete site: @sitename ?', array('@sitename' => $site->title)), 'admin/build/sites');
+
+  return $form;
+}
+
+function sites_site_delete_form_submit($form,&$form_state) {
+  $site_id = $form_state['values']['site_id'];
+
+  _sites_delete_site($site_id);
+  $form_state['redirect'] = 'admin/build/sites';
+}
diff --git a/sites.core.inc b/sites.core.inc
index 76a1698..9693cab 100644
--- a/sites.core.inc
+++ b/sites.core.inc
@@ -10,10 +10,10 @@
  */
 function _sites_get_sites() {
   $sites = array();
-  
+
   $q = 'SELECT * FROM {sites}';
   $res = db_query($q);
-  
+
   while($row = db_fetch_object($res)) {
     $sites[$row->sid] = $row;
   }
@@ -35,12 +35,27 @@ function _sites_get_site($sid) {
     $q = 'SELECT * FROM {sites} s WHERE s.sid = %d LIMIT 1';
     $res = db_query($q, $sid);
     $obj = db_fetch_object($res);
-    
-    return new site($obj->title, $obj->purl_prefix, $obj->front_page, $obj->menu_primary_links, $obj->menu_secondary_links, $obj->sid);
+
+    if ($obj === FALSE) {
+      return NULL;
+    } else {
+      return new site($obj->title, $obj->purl_prefix, $obj->front_page, $obj->menu_primary_links, $obj->menu_secondary_links, $obj->sid);
+    }
   }
   else return NULL;
 }
 
+function _sites_delete_site($sid) {
+  db_query('DELETE FROM {sites} WHERE sid = %d',$sid);
+  db_query('DELETE FROM {site_node} WHERE sid = %d',$sid);
+
+  // delete PURL prefix
+  purl_delete(array(
+    'provider' => 'sites',
+    'id' => $sid,
+  ));
+}
+
 
 /**
  * Get the current site id.
diff --git a/sites.install b/sites.install
index 67f5820..dfd9422 100644
--- a/sites.install
+++ b/sites.install
@@ -34,12 +34,11 @@ function sites_schema() {
     'fields' => array(
       'sid' => array(
         'description' => t('The site id.'),
-        'type' => 'int',
+        'type' => 'serial',
         'unsigned' => TRUE,
         'not null' => TRUE,
         'primary key' => TRUE,
         'unique' => TRUE,
-        'default' => 0,
       ),
       'title' => array(
         'description' => t('The site\'s administrative title.'),
diff --git a/sites.module b/sites.module
index ed0268c..704dbd4 100644
--- a/sites.module
+++ b/sites.module
@@ -6,9 +6,11 @@ include(drupal_get_path('module', 'sites') . '/site.inc');
 include(drupal_get_path('module', 'sites') . '/sites.context.inc');
 include(drupal_get_path('module', 'sites') . '/sites.core.inc');
 include(drupal_get_path('module', 'sites') . '/sites.purl.inc');
-include(drupal_get_path('module', 'sites') . '/sites.admin.inc');
 include(drupal_get_path('module', 'sites') . '/sites.views.inc');
 
+function sites_init() {
+
+}
 
 /**
  * Implementation of hook_menu().
@@ -19,6 +21,7 @@ function sites_menu() {
     'description' => '',
     'page callback' => 'sites_list_sites',
     'access callback' => TRUE,
+    'file' => 'sites.admin.inc',
   );
 
   $items['admin/build/sites/add'] = array(
@@ -28,6 +31,7 @@ function sites_menu() {
     'page arguments' => array('sites_site_form'),
     'access callback' => TRUE,
     'type' => MENU_LOCAL_TASK,
+    'file' => 'sites.admin.inc',
   );
 
   $items['admin/build/sites/edit/%'] = array(
@@ -36,14 +40,21 @@ function sites_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('sites_site_form', 4),
     'access callback' => TRUE,
+    'file' => 'sites.admin.inc',
+  );
+
+  $items['admin/build/sites/delete/%'] = array(
+    'title' => 'Delete site',
+    'description' => '',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('sites_site_delete_form', 4),
+    'access callback' => TRUE,
+    'file' => 'sites.admin.inc',
   );
 
   return $items;
 }
 
-
-
-
 /**
  * Implementation of template_preprocess_page
  */
@@ -57,8 +68,6 @@ function sites_preprocess_page(&$vars) {
   }
 }
 
-
-
 /**
  * Implementation of hook_form_alter().
  */
@@ -98,8 +107,6 @@ function sites_form_alter(&$form, $form_state, $form_id) {
   }
 }
 
-
-
 /**
  * Implementation of hook_nodeapi()
  */
@@ -114,8 +121,6 @@ function sites_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
   }
 }
 
-
-
 /**
  * Implementation of hook_block()
  */
@@ -130,8 +135,6 @@ function sites_block($op = 'list', $delta = 0, $edit = array()) {
   // }
 }
 
-
-
 /**
  * Check the implementation of hook_sites_access with the heaviest weight
  * as to whether the node should be accessible.
@@ -151,9 +154,6 @@ function sites_access($node) {
   return $permitted;
 }
 
-
-
-
 /**
  * Implementation of hook_sites_access()
  */
@@ -162,9 +162,6 @@ function sites_sites_access($node) {
   else return FALSE;
 }
 
-
-
-
 /**
  * Implementation of hook_menu_alter()
  */
@@ -172,13 +169,8 @@ function sites_menu_alter(&$items) {
   $items['node/%node']['access callback'] = 'sites_menu_access_override_node_view';
 }
 
-
-
 function sites_menu_access_override_node_view($op, $node) {
   if(!sites_access($node)) return FALSE;
   else return node_access($op, $node);
 }
 
-
-
-
