diff --git a/src/data/Web_Basic-Ash.css b/src/data/Web_Basic-Ash.css
index 121b9f94e..c9696d771 100644
--- a/src/data/Web_Basic-Ash.css
+++ b/src/data/Web_Basic-Ash.css
@@ -777,6 +777,33 @@ div#RepositoryList table.repolist tbody tr td.ColumnName {
     background-color: #FFF;
 }
 
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #CCC;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, #Contact {
@@ -1317,3 +1344,27 @@ body#fullyearlinked table.calendar thead tr th.monthName {
 body#fullyearlinked table.calendar tbody tr td {
     height:3em;
 }
+
+/* Calendar: OneDay 
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #000;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #000;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Basic-Cypress.css b/src/data/Web_Basic-Cypress.css
index ead07b9ea..d920f77d5 100644
--- a/src/data/Web_Basic-Cypress.css
+++ b/src/data/Web_Basic-Cypress.css
@@ -784,8 +784,10 @@ table.download td.Modified {
 
 /* Repositories
 ------------------------------------------------------ */
-div#RepositoryList { }
-
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
 div#RepositoryList table.repolist tbody tr td {
 }
 div#RepositoryList table.repolist tbody tr td a {
@@ -802,6 +804,33 @@ div#RepositoryList table.repolist tbody tr td.ColumnName {
     background-color: #FFF;
 }
 
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #E0E6E0;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, {
@@ -1324,3 +1353,27 @@ body#WebCal #CreatorInfo a, body#WebCal #CreatorInfo a:hover {
     color:#9DBF9D;
     background-color:#E0E6E0;
 }
+
+/* Calendar: OneDay 
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #000;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #000;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Basic-Lilac.css b/src/data/Web_Basic-Lilac.css
index 1090b100a..5c0764253 100644
--- a/src/data/Web_Basic-Lilac.css
+++ b/src/data/Web_Basic-Lilac.css
@@ -733,8 +733,10 @@ table.download td.Modified {
 
 /* Repositories
 ------------------------------------------------------ */
-div#RepositoryList { }
-
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
 div#RepositoryList table.repolist tbody tr td {
     background-color: #D8F3D6;
 }
@@ -752,6 +754,33 @@ div#RepositoryList table.repolist tbody tr td.ColumnName {
     background-color: #FFF;
 }
 
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #E0E0E9;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, #Contact {
@@ -1344,3 +1373,27 @@ body#fullyearlinked table.calendar thead tr th.monthName {
 body#fullyearlinked table.calendar tbody tr td {
     height:3em;
 }
+
+/* Calendar: OneDay 
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #000;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #000;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Basic-Peach.css b/src/data/Web_Basic-Peach.css
index d835e1525..4ec0b85f7 100644
--- a/src/data/Web_Basic-Peach.css
+++ b/src/data/Web_Basic-Peach.css
@@ -733,8 +733,10 @@ table.download td.Modified {
 
 /* Repositories
 ------------------------------------------------------ */
-div#RepositoryList { }
-
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
 div#RepositoryList table.repolist tbody tr td {
     background-color: #FFE09F;
 }
@@ -752,6 +754,33 @@ div#RepositoryList table.repolist tbody tr td.ColumnName {
     background-color: #FFF;
 }
 
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #FFFBE7;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, #Contact {
@@ -1344,3 +1373,27 @@ body#fullyearlinked table.calendar thead tr th.monthName {
 body#fullyearlinked table.calendar tbody tr td {
     height:3em;
 }
+
+/* Calendar: OneDay 
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #000;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #000;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Basic-Spruce.css b/src/data/Web_Basic-Spruce.css
index afe2c7478..eb5590582 100644
--- a/src/data/Web_Basic-Spruce.css
+++ b/src/data/Web_Basic-Spruce.css
@@ -733,8 +733,10 @@ table.download td.Modified {
 
 /* Repositories
 ------------------------------------------------------ */
-div#RepositoryList { }
-
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
 div#RepositoryList table.repolist tbody tr td {
     background-color: #EAFFE4;
 }
@@ -752,6 +754,33 @@ div#RepositoryList table.repolist tbody tr td.ColumnName {
     background-color: #FFF;
 }
 
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #EAEEF4;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, #Contact {
@@ -1344,3 +1373,27 @@ body#fullyearlinked table.calendar thead tr th.monthName {
  body#fullyearlinked table.calendar tbody tr td {
     height:3em;
 }
+
+/* Calendar: OneDay
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #000;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #000;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Nebraska.css b/src/data/Web_Nebraska.css
index 660f75418..fb5cb08d9 100644
--- a/src/data/Web_Nebraska.css
+++ b/src/data/Web_Nebraska.css
@@ -772,6 +772,56 @@ table.download td.Modified {
     font-weight:bold;
 }
 
+/* Repositories
+------------------------------------------------------ */
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
+div#RepositoryList table.repolist tbody tr td {
+    background-color: #C1B398;
+}
+div#RepositoryList table.repolist tbody tr td a {
+    display: block;
+    padding: .3em 10px;
+}
+div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
+    width: 9%;
+}
+div#RepositoryList table.repolist tbody tr td.ColumnType {
+    width: 15%;
+}
+div#RepositoryList table.repolist tbody tr td.ColumnName {
+    background-color: #FFF;
+}
+
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #F6F2EE;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, #Contact {
@@ -1367,3 +1417,27 @@ body#fullyearlinked table.calendar thead tr th.monthName {
 body#fullyearlinked table.calendar tbody tr td {
     height:3em;
 }
+
+/* Calendar: OneDay
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #000;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #000;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Print-Default.css b/src/data/Web_Print-Default.css
index bcbb99d41..003c5dc2c 100644
--- a/src/data/Web_Print-Default.css
+++ b/src/data/Web_Print-Default.css
@@ -1,9 +1,9 @@
-/*
+./*
  **************************************************************************************************
 Copyright Holder and License
 **************************************************************************************************
 GRAMPS Cascading Style Sheet
-Style Name: Printer Default
+Style Name: Visually Impaired Stylesheet
 Style Author: Jason M. Simanek (2008)
 **************************************************************************************************
 This website was created with GRAMPS
@@ -32,8 +32,12 @@ see <http://www.gnu.org/licenses/>.
 --------------------------------------------------------------------------------------------------
 Color Palette
 --------------------------------------------------------------------------------------------------
-black		#000
-white		#FFF
+brown dark      #542
+brown light     #C1B398
+gray            #696969
+green dark	#228A22
+green           #6AF364, #5D835F
+green lighter   #D8F3D6
 
 ===== Ancestor Graph Color Scheme =====
 Males       #E5F2FE
@@ -47,17 +51,21 @@ Females     Web_Gender_Female.png
 # $Id$
 
  NarrativeWeb Styles
--------------------------------------------------------------------------------------------- 
-
- General Elements
------------------------------------------------------ */
-
+--------------------------------------------------------------------------------------------  */
 body {
-    color:#000;
-    margin:0;
-    padding:0;
-    background-color:#FFF;
+    font-family: Arial, sans, sans-serif, Helvetica;
+    color: #000;
+    background-color: #FFF;
 }
+body#NarrativeWeb_Horizontal {
+    padding: 158px 0px 0px 0px;
+}
+body#NarrativeWeb_Vertical {
+    padding: 128px 0px 0px 44px;
+}
+
+/* General Elements
+----------------------------------------------------- */
 div {
     margin:0;
     padding:0;
@@ -83,6 +91,7 @@ img {
     background:none;
 }
 .content {
+    overflow: auto;
     width:965px;
     margin:0 auto;
     padding-bottom:.5em;
@@ -127,28 +136,28 @@ h3 {
 }
 h4 {
     font:normal 1.2em/1.2em serif;
-    color:#000;
-    margin:0;
+    color: #FFF;
+    margin-top: .3cm;
     padding:.2em 0 .2em 20px;
-    background-color:#FFF;
-    border-bottom:solid 2px #000;
+    background-color: #228A22;
+    border-bottom:solid 4px #A97;
 }
 h5, h6 {
     font:normal 1em/1.2em serif;
     font-style:italic;
     margin:1.3em 0 .5em 1em;
 }
-
 p#description {
     max-width:800px;
     margin:0;
     padding:1em 20px;
 }
 p#description:first-letter {
-    color:#000;
+    color: #228A22;
     font-size:xx-large;
 }
 p a {
+    color: #FFF;
     text-decoration:underline;
 }
 sup {
@@ -164,11 +173,19 @@ ol {
 ol li a {
     text-decoration:none;
 }
+ol li a:hover {
+    text-decoration:underline;
+}
 a {
-    color:#000;
+    color: #542;
 }
 a:visited {
-    color:#000;
+    color: #542;
+}
+a:hover {
+    color: #000;
+    background-color: #C1B398;
+    text-decoration:underline;
 }
 span.preposition {
     padding-left:1em;
@@ -176,60 +193,79 @@ span.preposition {
 }
 .grampsid {
     font:normal .8em/1.2em monospace;
-    color:#000;
+    color: #000;
 }
 
 /* Header
 ----------------------------------------------------- */
-#header  {
-    margin:0;
-    height:1.5cm;
-    padding:0 0 .9em 0;
-    border-bottom:solid 2px #000;
+div#header  {
+    background-color: #542;
+    border-bottom: solid 8px #5D835F;
+    height: 60px;
+    width: 100%;
 }
 #SiteTitle {
     margin:0;
-    padding:.5em 0 0 20px;
-    font-style:italic;
+    padding:.5em 0 0.5em 10px;
+    font-size: 28px;
+    color: #FFF;
+    font-style: italic;
 }
 p#user_header {
     font-size:1.3em;
     text-align:left;
+    color: #6AF364;
     margin:0;
     padding:.2em 0 .6em 20px;
 }
 
 /* Footer
 ----------------------------------------------------- */
-#footer {
-    clear:both;
-    height:1.5cm;
-    width:100%;
-    font-size:12px;
-    line-height:130%;
-    font-family:sans-serif;
-    margin:0;
-    padding:0;
-    border-top:solid 2px #000;
+div#footer {
+    width: 100%;
+    height: 60px;
+    overflow: auto;
+    clear: both;
+    font-size: 12px;
+    margin: 0;
+    color: #FFF;
+    background-color: #542;
+    border-top: solid 8px #5D835F;
 }
-#footer img {
-    display:none;
+div#footer a, div#footer a:visited {
+    text-decoration:none;
+    color: #FFF;
 }
-#footer p#createdate {
+div#footer a:hover {
+    color: #000;
+    text-decoration:underline;
+}
+div#footer img {
+    border:0;
+    margin:0 auto;
+    vertical-align:middle;
+}
+div#footer p#createdate {
     float:left;
     width:60%;
     text-align:left;
     margin-left:10px;
 }
-#footer p#copyright {
+div#footer p#copyright {
     float:right;
     text-align:right;
-    margin-top:10px;
+    color: #FFF;
+    margin: 10px 10px 0px 0px;
+}
+div#footer p#copyright img {
+    float:right;
+    margin-right: 10px;
 }
 #user_footer {
     width:70%;
     float:left;
     margin:1em;
+     color: #6AF364;
 }
 #user_footer p {
     font:normal 1em/1.2em serif;
@@ -237,36 +273,52 @@ p#user_header {
     padding:0;
 }
 
-/* Alphabet Navigation
------------------------------------------------------ */
-div#alphabet, div#navigation, div#subnavigation {
-    display:none;
-}
-
 /* Navigation
 ----------------------------------------------------- */
+div#navigation, div#subnavigation {
+    display: none;
+}
+
+/* Alphabet Navigation
+----------------------------------------------------- */
+div#alphabet {
+    display: none;
+}
 
 /* Main Table
 ----------------------------------------------------- */
 table.infolist {
     width:100%;
-    margin:0;
-    padding:0;
-    background-color:#FFF;
+    margin: 0;
+    padding: 0;
+    font-size: 12px;
 }
 table.infolist thead tr th {
     font:normal 1.1em/1.2em serif;
+    color: #000;
     margin:0;
     padding:.2em 10px;
-    border-bottom:solid 1px #000;
+    background-color: #6AF364;
+    border: solid 1px #5D835F;
+}
+table.infolist thead tr th a {
+    color: #000;
+}
+table.infolist thead tr th a:hover {
+    background-color: #C1B398;
 }
 table.infolist tr td {
     font:normal 1.1em/1.4em serif;
     vertical-align:middle;
-    padding:.1em 10px;
+    padding: 6px 0 6px 10px;
+}
+table.infolist tr td a {
+    display:block;
+    text-decoration:none;
+    color: #000;
 }
 table.infolist tr.BeginLetter td, table.infolist tr.BeginSurname td {
-    border-top:solid 1px #000;
+    border-top:solid 1px #228A22;
 }
 table.infolist tr td.ColumnLetter {
     width:3%;
@@ -290,7 +342,15 @@ table.infolist tbody tr td.ColumnType {
 }
 table.infolist tbody tr td.ColumnPartner {
     font-size:.9em;
+    background-color: #FFF;
 }
+table.infolist tbody tr td.ColumnPartner a {
+    display:block;
+    padding:.6em 10px;
+    vertical-align:middle;
+}
+table.infolist tbody tr td.ColumnPartner a:hover { }
+
 table.infolist tbody tr td.ColumnParents {
     font-size:.9em;
 }
@@ -316,14 +376,30 @@ table.surnamelist thead tr th.ColumnSurname,
 table.surnamelist thead tr th {
     padding:0;
 }
+table.surnamelist thead tr th a, table.surnamelist thead tr th a:visited {
+    display:block;
+    text-align:left;
+    text-decoration:none;
+    padding:.2em 10px;
+}
+table.surnamelist tr th:hover { }
+
 table.surnamelist thead tr th.ColumnLetter {
     padding-left:20px;
     padding-right:10px;
 }
-table.surnamelist tbody tr td.ColumnSurname { }
-
+table.surnamelist tbody tr td {
+    background-color: #D8F3D6;
+}
+table.surnamelist tbody tr td.ColumnLetter a {
+    background: none;
+}
+table.surnamelist tbody tr td.ColumnSurname {
+    background-color: #FFF;
+}
 table#SortByName thead tr th.ColumnSurname, 
 table#SortByCount thead tr th.ColumnQuantity {
+    background-color: #C1B398;
 }
 table#SortByName thead tr th.ColumnSurname a:after, 
 table#SortByCount thead tr th.ColumnQuantity a:after {
@@ -338,17 +414,23 @@ table#SortByName tbody tr td.ColumnSurname a {
 }
 table#SortByCount tbody tr td.ColumnQuantity { }
 
+table.surnamelist tbody tr td.ColumnSurname:hover,
+ table#SortByName tbody tr td.ColumnSurname:hover {
+    background-color: #C1B398;
+}
 table.surname {
     border-bottom:solid 1px #000;
 }
-table.surname tbody tr td {
-    border-bottom:dashed 1px #000;
-}
 table.surname thead tr th.ColumnName {
     width:20%;
     padding-left:20px;
 }
+table.surname tbody tr td {
+    border-bottom:dashed 1px #000;
+    background-color: #D8F3D6;
+}
 table.surname tbody tr td.ColumnName {
+    background-color: #FFF;
     width:20%;
     padding:0;
 }
@@ -358,6 +440,16 @@ table.surname tbody tr td.ColumnName a {
 }
 table.surname tbody tr td.ColumnName a span.grampsid { }
 
+table.surname tbody tr td.ColumnName:hover {
+    background-color: #C1B398;
+}
+table.surname tbody tr td.ColumnPartner {
+    background-color: #FFF;
+}
+table.surname tbody tr td.ColumnPartner a {
+    display:block;
+    padding:.6em 10px .6em 0px;
+}
 table.surname thead tr th.ColumnParents, 
 table.surname tbody tr td.ColumnParents {
     width:25%;
@@ -365,55 +457,58 @@ table.surname tbody tr td.ColumnParents {
 
 /* Individuals
 ----------------------------------------------------- */
-#Individuals {  }
+div#Individuals {  }
 
-#Individuals table.individuallist {
-    border-bottom:solid 1px #000;
+div#Individuals table.individuallist {
+    border-bottom: solid 1px #5D835F;
 }
-#Individuals table.individuallist tbody tr td {
-    border-bottom:dashed 1px #000;
+div#Individuals table.individuallist tbody tr td {
+    border-bottom: dashed 1px #5D835F;
+    background-color: #D8F3D6;
 }
-table.individuallist tbody tr td.ColumnName {
-    padding:0;
-    background-color:#FFF;
+div#Individuals table.individuallist tbody tr td a {
+    display: block;
+    padding: .6em 10px;
 }
-table.individuallist tbody tr td.ColumnName a {
-    display:block;
-    padding:.6em 10px;
+div#Individuals table.individuallist tbody tr td.ColumnSurname a:hover, 
+div#Individuals table.individuallist tbody tr td.ColumnSurname a:active {
+    cursor:default;
+    color: #000;
+    background:none;
+}
+div#Individuals table.individuallist tbody tr td.ColumnName {
+    background-color: #FFF;
+}
+div#Individuals table.individuallist tbody tr td.ColumnName a {
     vertical-align:middle;
 }
-table.individuallist tbody tr td.ColumnPartner {
-    padding:0;
-    background-color:#FFF;
+div#Individuals table.individuallist tbody tr td.ColumnPartner {
+    background-color: #FFF;
 }
-table.individuallist tbody tr td.ColumnPartner a {
-    display:block;
-    padding:.6em 10px;
-    vertical-align:middle;
-}
-#Individuals div table.infolist tr td p {
+div#Individuals div table.infolist tr td p {
     font:normal .9em/1.2em sans-serif;
     vertical-align:top;
 }
-#Individuals div table.infolist tr td p a {
+div#Individuals div table.infolist tr td p a {
     display:inline;
 }
 
-/* IndividualDetail
------------------------------------------------------- */
-#IndividualDetail { }
+div#IndividualDetail { }
 
 #IndividualDetail div table.infolist tr td {
     font:normal .9em/1.2em sans-serif;
     vertical-align:top;
 }
-#IndividualDetail div table.infolist tr td a {
+div#IndividualDetail div table.infolist tr td a {
     display:inline;
 }
-#IndividualDetail table.infolist tbody tr td.ColumnAttribute {
+div#IndividualDetail table.infolist tr td a:hover {
+    text-decoration:underline;
+}
+div#IndividualDetail table.infolist tbody tr td.ColumnAttribute {
     width:10%;
 }
-#IndividualDetail div.subsection table tr td:first-child {
+div#IndividualDetail div.subsection table tr td:first-child {
     padding-left:20px;
 }
 
@@ -421,33 +516,128 @@ table.individuallist tbody tr td.ColumnPartner a {
 ----------------------------------------------------- */
 #Places {  }
 
+#Places table.infolist tbody tr td.ColumnLetter {
+    background-color: #D8F3D6;
+}
 #Places table.infolist tbody tr td.ColumnName {
     padding:0;
+    background-color: #FFF;
 }
 #Places table.infolist tbody tr td.ColumnName a {
     padding:.1em 10px .3em 10px;
 }
 
+/* EventList and EventDetail
+----------------------------------------------------- */
+div#EventList, div#EventDetail { }
+
+div#events table.eventlist {
+    margin-top: .3cm;
+}
+div#events table.eventlist tbody tr td.ColumnEvent a {
+    padding: 2px 100px 2px 10px;
+}
+div#events table.eventlist tbody tr td.ColumnPlace a {
+    padding: 2px 70px 2px 0px;
+}
+table.eventlist tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+table.eventlist tbody tr td.ColumnEvent {
+    width: 20%;
+}
+table.eventlist tbody tr td.ColumnDate {
+    background-color: #D8F3D6;
+    width: 16%;
+}
+table.eventlist tbody tr td.ColumnPlace {
+    background-color: #FFF;
+    width: 35%;
+}
+table.eventlist tbody tr td.ColumnSources {
+    background-color: #FFF;
+    width: 12%;
+}
+table.eventlist tbody tr td.ColumnNotes {
+    background-color: #D8F3D6;
+    width: 25%;
+}
+table.eventlist tbody tr td.ColumnPerson {
+    width: 35%;
+}
+table.eventlist tbody tr td.ColumnPartner {
+    width: 35%;
+}
+div#families table.eventlist {
+    margin: 0;
+    padding: 0;
+}
+div#EventList table.eventlist tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#EventList table.eventlist tbody tr td {
+    padding: 4px 0px 4px 0px;
+}
+div#EventList table.eventlist tbody tr td.ColumnEvent a,
+div#EventList table.eventlist tbody tr td.ColumnPerson a,
+div#EventList table.eventlist tbody tr td.ColumnPartner a {
+    display: block;
+    padding: 4px 0px 4px 10px;
+}
+div#EventDetail h3 {
+    font-size: xxx-large;
+}
+div#EventDetail h3:first-lettr {
+    color: #5D835F;
+}
+div#EventDetail table.eventlist {
+    margin: .5cm 0 .3cm 1.5cm;
+    width: 800px;
+}
+div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
+    border-top: solid 1px #5D835F;
+    font-weight: bold;
+    text-transform: uppercase;
+    width: 20%;
+}
+div#EventDetail table.eventlist tbody tr td.ColumnEvent {
+    background-color: #D8F3D6;
+    border-top: solid 1px #5D835F;
+}
+    
 /* Gallery
 ----------------------------------------------------- */
 #Gallery {  }
 
 #Gallery table.infolist tbody tr td.ColumnRowLabel, 
 #Gallery table.infolist tbody tr td.ColumnDate {
+    background-color: #D8F3D6;
     padding-bottom:0;
 }
 #Gallery table.infolist tbody tr td.ColumnName {
     padding:0;
+    background-color: #FFF;
 }
 #Gallery table.infolist tbody tr td.ColumnName a {
     padding:.1em 10px .3em 10px;
 }
+#Gallery table.gallerylist tbody tr td {
+    border-bottom: dashed 1px #000;
+}
 #GalleryNav {
     font:normal 1em/1em sans-serif;
     margin:1em 0 0 0;
     padding:1.2em 0 1.4em 0;
     text-align:center;
 }
+#GalleryNav a {
+    font-weight:bold;
+    text-decoration:none;
+    border:solid 1px #228A22;
+}
+#GalleryNav a:hover { }
+
 #GalleryNav a#Previous {
     padding:.5em .7em .3em .7em;
 }
@@ -469,7 +659,7 @@ table.individuallist tbody tr td.ColumnPartner a {
     position:relative;
     overflow:hidden;
     text-align:center;
-    border:solid 1px #000;
+    border:solid 1px #228A22;
 }
 #GalleryDisplay img {
     margin:0 auto;
@@ -491,7 +681,7 @@ table.individuallist tbody tr td.ColumnPartner a {
     margin-bottom:0;
     border-style:solid;
     border-width:2px 0 1px 0;
-    border-color:#000;
+    border-color: #000;
 }
 table.exifdata tr td.ColumnAttribute {
     border-top:solid 1px #000;
@@ -505,6 +695,7 @@ table.exiflist tr td.ColumnValue {
 /* Contact
 ----------------------------------------------------- */
 #Contact #summaryarea {
+    background-color: #D8F3D7;
     width:500px;
     margin:0 auto;
     padding:3em;
@@ -541,75 +732,131 @@ table.exiflist tr td.ColumnValue {
 #email {
     clear:left;
 }
+#email a {
+    text-decoration:none;
+}
+#email a:hover {
+    text-decoration:underline;
+}
 
 /* Download 
 ----------------------------------------------------- */
-#Download { 
-    padding-bottom:2cm;
-    padding-left:.5cm;
-    padding-right:.5cm;
-    height:390px;
+
+div#Download { 
+    margin: 0;
+    padding: 0px 0px .5em 0px;
 }
-table.download {
-    padding-top:2cm;
-    border:solid 2px #000;
-    width:100%;
+div#Download table.download {
+    padding: 0;
+    margin: .5em 0 .5em 0;
+    border: solid 1px #5D835F;
+    width: 100%;
 }
-table.download img {
+div#Download table.download img {
     float:center;
 }
-table.download thead tr th {
-    text-transform:uppercase;
-    padding-left:20px;
-    padding-top:15px;
-    border-style:solid;
-    border-color:#000;
-    border-width:0 2px 2px 2px;
-    text-align:left;
-}
-table.download tbody tr#Row02 {
+div#Download table.download tbody tr#Row02 {
     border-bottom:solid 2px #000;
 }
-table.download tbody tr td { 
-    padding-left:20px;
-    padding-top:15px;
-    border-style:solid;
-    border-color:#000;
-    border-width:0 2px 2px 2px;
+div#Download table.download tbody tr td { 
+    background-color: #D8F3D6;
+    border: solid 1px #000;
     text-align:left;
 }
-table.download td.ColumnDescription {
+div#Download table.download td.Filename {
+    width:30%;
+    background-color: #FFF;
+}
+div#Download table.download td.Filename a {
+    display: block;
+    padding: 10px 10px 14px 6px;
+    font-weight:bold;
+    font-style: italic;
+    text-decoration:none;
+}
+div#Download table.download td.Description {
     width:45%;
 }
-table.download td.ColumnLicense {
+div#Download table.download td.License {
     width:6%;
-    padding-left:20px;
 }
-table.download td.ColumnFilename {
-    width:30%;
-}
-table.download td.ColumnModified {
+div#Download table.download td.Modified {
     width:17%;
-    font-weight:bold;
 }
 
 /* Sources
 ----------------------------------------------------- */
 #Sources {  }
 
-#Sources table.infolist tbody tr td.ColumnRowLabel {
+div#Sources table.infolist tbody tr td {
+    background-color: #D8F3D6;
+}
+div#Sources table.infolist tbody tr td.ColumnRowLabel {
     padding-bottom:0;
 }
-#Sources table.infolist tbody tr td.ColumnName {
+div#Sources table.infolist tbody tr td.ColumnName {
     padding:0;
+    background-color: #FFF;
 }
-#SourceDetail div#references ol li {
+div#Sources table.infolist tbody tr td.ColumnName a {
+    font-size:.9em;
+    padding:.1em 10px .3em 10px;
+}
+div#Sources table.infolist tbody tr td.ColumnName a:hover { }
+
+div#SourceDetail div#references ol li {
     padding-bottom:.5em;
 }
 
+
 /* Repositories
 ------------------------------------------------------ */
-#RepositoryList table.repolist tbody tr td.ColumnName {
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
+div#RepositoryList table.repolist tbody tr td {
+    background-color: #D8F3D6;
+}
+div#RepositoryList table.repolist tbody tr td a {
+    display: block;
+    padding: .3em 10px;
+}
+div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
+    width: 9%;
+}
+div#RepositoryList table.repolist tbody tr td.ColumnType {
+    width: 15%;
+}
+div#RepositoryList table.repolist tbody tr td.ColumnName {
+    background-color: #FFF;
+}
+
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #D8F3D6;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
 }
 
 /* Subsections
@@ -634,6 +881,12 @@ div.subsection h4 {
 div.subsection table, div.subsection ol, div.subsection p {
     font-size:.9em;
 }
+div.subsection a {
+    text-decoration:none;
+}
+div.subsection a:hover {
+    text-decoration:underline;
+}
 div.subsection table.infolist {
     width:100%;
     margin:0;
@@ -649,19 +902,20 @@ div#events h4 {
     border:none;
 }
 #IndividualDetail {
-}
-#IndividualDetail div#events table.infolist thead tr th {
-    font-weight:bold;
-    font-size:12px;
-    line-height:12px;
-    font-family:sans-serif;
-    text-transform:uppercase;
-    padding-top:6px;
-    padding-bottom:4px;
+    background-color: #FFF;
 }
 #IndividualDetail div#events table.eventtable {
     width:100%;
-    padding-bottom:15px;
+    padding-top:15px;
+}
+#IndividualDetail div#events table.infolist thead tr th {
+    font-weight:bold;
+    font-size:10px;
+    line-height:12px;
+    text-transform:uppercase;
+    color: #542;
+    padding-top:6px 0 4px 0;
+    background-color: #6AF364;
 }
 #IndividualDetail div#events table.infolist thead tr th:first-child {
     padding-left:20px;
@@ -671,61 +925,50 @@ div#events h4 {
     padding-bottom:.8em;
 }
 #IndividualDetail div#events table.infolist tbody tr td.ColumnAttribute {
-    border-bottom:solid 1px #000;
+    border-bottom:solid 1px #228A22;
 }
 #IndividualDetail div#events table.infolist tbody tr td.ColumnValue {
     border-bottom:solid 1px #000;
 }
 table.infolist tbody tr td.ColumnValue p {
     font-family:sans-serif;
-    color:#696969;
+    color: #696969;
     margin:.2em 0 0 2em;
 }
-table.eventtable thead tr th {
-    color:#000;
-}
-table.eventtable tbody tr td {
-    border-bottom:solid 1px #000;
-}
-div#events table.attrlist {
-    margin-top:.3cm;
-    margin-left:.78cm;
-    width:880px;
-}
-table.attrlist thead tr th {
-    color:#000;
-}
-div#events table.attrlist tbody tr td {
-    border-bottom:dashed 2px #000;
-}
-div#events table.attrlist tbody tr td.ColumnType {
-    width:100px;
-}
-div#events table.attrlist tbody tr td.ColumnValue {
-    width:200px;
-}
-div#events table.attrlist tbody tr td.ColumnSource {
-    width:80px;
-}
-div#events table.attrlist tbody tr td.ColumnNote {
-    width:450px;
-}
 
 /* Subsections : Attributes
 ----------------------------------------------------- */
 div#attributes { }
 
-div#attributes table.attrlist tbody tr td {
-    border-bottom:solid 1px #000;
+table.attrlist {
+    width: 100%;
 }
-div#attributes table.attrlist tbody tr td.ColumnType {
-    width:20%;
+table.attrlist thead tr th {
+    font-weight: bold;
+    text-transform: uppercase;
 }
-div#attributes table.attrlist tbody tr td.ColumnValue {
-    width:60%;
+table.attrlist tbody tr {
+    border: solid 1px #5D835F;
 }
-div#attributes table.attrlist tbody tr td.ColumnSources {
-    width:20%;
+table.attrlist tbody tr td {
+    background-color: #D8F3D6;
+}
+table.attrlist tbody tr td.ColumnType {
+    width: 200px;
+}
+table.attrlist tbody tr td.ColumnValue {
+    width: 250px;
+}
+table.attrlist tbody tr td.ColumnSources {
+    background-color: #FFF;
+    width: 100px;
+}
+table.attrlist tbody tr td.ColumnNotes {
+    width: 400px;
+}
+div#attributes table.attrlist tbody tr td.ColumnNotes {
+    width: 400px;
+    background-color: #D8F3D6;
 }
 
 /* Subsections : Parents
@@ -747,9 +990,12 @@ div#parents table.infolist tbody tr td.ColumnValue ol li {
 /* Subsections : Families
 ----------------------------------------------------- */
 div#families table.infolist {
-    margin-top:.5em;
+    margin: .3cm 0 .3cm 0;
 }
-div#Families table.infolist tbody tr td {
+div#Families table.infolist tbody tr td { }
+
+div#families table.infolist tbody tr td.ColumnValue {
+    background-color: #FFF;
 }
 div#families table.infolist tbody tr td.ColumnValue p {
     margin-top:0;
@@ -805,6 +1051,7 @@ div#Addresses {
 }
 div#Addresses table.infolist {
     font-size:.35cm;
+    background-color: #FFF;
 }
 div#Addresses table.infolist tbody tr td {
     border-bottom:solid 1px #000;
@@ -848,6 +1095,17 @@ div#Addresses table.infolist tbody tr td.ColumnPhone {
     height:150px;
     text-align:center;
 }
+#indivgallery div.thumbnail a {
+    display:block;
+    margin:0;
+    padding:0;
+    background:none;
+}
+#indivgallery div.thumbnail a img {
+    margin-bottom:.5cm;
+    padding:0;
+    border:solid 1px #000;
+}
 #indivgallery div.thumbnail p {
     font:normal .7em/1.4em sans-serif;
     text-align:center;
@@ -887,12 +1145,13 @@ div#sourcerefs ol li ol {
 /* Subsections : Summary Area
 ----------------------------------------------------- */
 div#summaryarea {
+    background-color: #FFF;
 }
 div#summaryarea table.infolist {
     margin:0;
     padding:0;
     background:#FFF;
-    border-bottom:solid .7em #000;
+    border-bottom:solid .7em #FFF;
 }
 div#summaryarea table.infolist tr td, div#summaryarea table.infolist tr td p {
     font:normal .9em/1.2em sans-serif;
@@ -903,6 +1162,7 @@ div#summaryarea table.infolist tr td a, div#summaryarea table.infolist tr td p a
 }
 div#summaryarea table.infolist tbody tr td.ColumnAttribute {
     width:14%;
+    color: #696969;
     padding-left:20px;
 }
 
@@ -916,7 +1176,7 @@ div#pedigree {
 }
 #pedigree a {
     text-decoration:none;
-    color:#000;
+    color: #000;
 }
 #pedigree a:hover {
     text-decoration:underline;
@@ -947,7 +1207,7 @@ div#pedigree {
 .spouse a {
     font-weight:normal;
     font-style:normal;
-    color:#000;
+    color: #000;
 }
 .spouse:before {
     content: "+ ";
@@ -982,11 +1242,29 @@ div#pedigree {
     font:normal .7em/1.4em sans-serif;
     text-align:center;
     text-decoration:none;
+    color: #542;
     width:118px;
     padding:5px 20px 7px 20px;
     margin-top:-25px;
     margin-left:16px;
-    border:solid 1px #000;
+    background-color: #FFF;
+    border:solid 1px #228A22;
+}
+#treeContainer div.boxbg a:hover {
+    position:relative;
+    z-index:999;
+    font-size:1em;
+    text-decoration:none;
+    color: #542;
+    width:190px;
+    margin-left:-20px;
+    padding:10px 25px 12px 25px;
+    border:solid 2px #228A22;
+}
+#treeContainer div.boxbg a:hover, 
+#treeContainer div.AncCol3 a:hover, 
+#treeContainer div.AncCol4 a:hover {
+    margin-top:-44px;
 }
 #treeContainer div.boxbg a.noThumb, 
 #treeContainer div.AncCol3 a, 
@@ -998,6 +1276,12 @@ div#pedigree {
 #treeContainer div.boxbg a.noThumb:hover {
     margin-top:0;
 }
+#treeContainer div.AncCol0 a:hover {
+    margin-left:12px;
+}
+#treeContainer div.AncCol4 a:hover {
+    margin-left:-60px;
+}
 #treeContainer div.boxbg span.thumbnail {
     display:block;
     height:65px;
@@ -1008,12 +1292,10 @@ div#pedigree {
     height:65px;
     margin:0 auto;
 }
-#treeContainer div.boxbg a:hover span.thumbnail, 
-#treeContainer div.boxbg a:hover span.thumbnail img {
+#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
     height:80px;
 }
-#treeContainer div.AncCol3 span.thumbnail, 
-#treeContainer div.AncCol4 span.thumbnail {
+#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
     display:none;
 }
 #treeContainer div.boxbg a:hover span.thumbnail {
@@ -1029,6 +1311,8 @@ div#pedigree {
 }
 #treeContainer div.unknown a,
 #treeContainer div.unknown span.unlinked {
+    background-color: #000;
+    color: #FAFAFA;
 }
 .shadow {
     display:none;
@@ -1039,7 +1323,7 @@ div#pedigree {
     height:1px;
     margin:0 0 0 16px;
     padding:0;
-    background-color:#000;
+    background-color: #228A22;
 }
 #tree div div.bhline {
     position:absolute;
@@ -1047,7 +1331,7 @@ div#pedigree {
     width:1px;
     margin:0 0 0 16px;
     padding:0;
-    background-color:#000;
+    background-color: #228A22;
 }
 .ghline, .gvline {
     display:none;
@@ -1057,7 +1341,7 @@ div#pedigree {
 -------------------------------------------------------------------------------------------- */
 /* Calendar : General */
 body#WebCal {
-    padding:0 14px;
+    background-color: #FFF;
 }
 .calendar {
     empty-cells:show;
@@ -1083,22 +1367,34 @@ body#WebCal {
     font-size:2em;
     line-height:100%;
     text-transform:none;
+    color: #542;
     padding:.3em 0 .2em 0;
+    background-color: #FFF;
 }
 #CreatorInfo {
     float:right;
-    color:#FFF;
+    color: #FFF;
     margin:-24px 10px 0 0;
 }
+#CreatorInfo a {
+    color: #FFF;
+}
+#CreatorInfo a:hover {
+    color: #FFF;
+}
 .calendar thead tr th.weekend, 
 .calendar thead tr th.weekday {
     font-style:italic;
-    border:solid 2px #000;
+    color: #000;
+    background-color: #6AF364;
+    border:solid 2px #228A22;
 }
 .calendar tfoot tr td {
     padding:.7em 5% 1em 5%;
     border-top:solid 2px #000;
     vertical-align:middle;
+    color: #228A22;
+    background-color: #D8F3D6;
 }
 
 /* Calendar : Date Numeral */
@@ -1109,8 +1405,10 @@ body#WebCal {
     font-size:1.2em;
     line-height:100%;
     text-align:center;
+    color: #542;
     margin:0 0 0 .5em;
     padding:.2em 0;
+    background-color: #D8F3D6;
 }
 
 /* Calendar : Date Container */
@@ -1120,20 +1418,22 @@ body#WebCal {
     padding:0;
     border-width:1px 0 0 1px;
     border-style:solid;
-    border-color:#000;
+    border-color: #228A22;
 }
 .calendar tbody tr td.weekday {
+    background-color: #FFF;
 }
 .calendar tbody tr td.weekend {
+    background-color: #D8F3D6;
 }
 .calendar tbody tr td.saturday {
-    border-right:solid 1px #000;
+    border-right:solid 1px #228A22;
  }
 .calendar tbody tr td.sunday {
-    border-left:solid 1px #000;
+    border-left:solid 1px #228A22;
 }
 .calendar tbody tr td:first-child {
-    border-left:solid 1px #000;
+    border-left:solid 1px #228A22;
 }
 .calendar tbody tr:first-child td {
     border-top:none;
@@ -1152,7 +1452,7 @@ body#WebCal {
     width:92%;
     margin:0 4%;
     padding:.2em 0 .3em 0;
-    border-top:dashed 1px #000;
+    border-top:dashed 1px #228A22;
 }
 .calendar tbody tr td ul li:first-child {
     border:none;
@@ -1161,13 +1461,16 @@ body#WebCal {
 /* Calendar : Birthday, Anniversary, Highlight */
 .calendar tbody tr td ul li em {
     font-style:normal;
+    color: #0A65B5;
 }
 .calendar tbody tr td ul li span.yearsmarried em {
+    color: #228A22;
 }
 .calendar tbody tr td.highlight { }
 
 .calendar tbody tr td.highlight div.date {
-    color:#000;
+    color: #0A65B5;
+    background-color: #C2E1FE;
 }
 
 /* Calendar : Previous-Next Month */
@@ -1175,10 +1478,14 @@ body#WebCal {
 .calendar tbody tr td.next, 
 .calendar tbody tr td.previous div.date, 
 .calendar tbody tr td.next div.date {
-    color:#000;
+    color: #333;
+    background-color: #D8F3D6;
 }
 
 /* Calendar : Full Year */
+body#fullyearlinked {
+    background-color: #FFF;
+}
 body#fullyearlinked div.content {
     width:963px;
     margin:0 auto;
@@ -1192,17 +1499,48 @@ body#fullyearlinked table.calendar {
 }
 body#fullyearlinked table.calendar thead tr th {
     height:2em;
+    border-width: 1px 1px 0px 0px;
+    border-color: #000;
+    text-align: center;
 }
 body#fullyearlinked table.calendar thead tr th.monthName {
     font-size:1.2em;
     padding:2px 0;
+    border-bottom: solid 1px #000;
 }
 body#fullyearlinked table.calendar tbody tr td {
     height:3em;
 }
+body#fullyearlinked table.calendar tbody tr td.emptyDays {
+    background-color: #FFF;
+}
 body#fullyearlinked table.calendar tbody tr td.saturday {
     border-right:solid 2px #000;
 }
 body#fullyearlinked able.calendar tbody tr td.sunday {
     border:solid 2px #000;
 }
+
+/* Calendar: OneDay
+--------------------------------------------------------------------------------- */
+body#OneDay h3 {
+    color: #228A22;
+    font-weight: bold;
+    text-align: center;
+}
+table.oneday {
+    margin: .3em 0 .3em 0;
+    padding: 0;
+}
+table.oneday tbody tr td {
+    border-bottom: dashed 1px #228A22;
+}
+table.oneday tbody tr td.ColumnRowLabel {
+    width: 5%;
+}
+table.oneday tbody tr td.ColumnText {
+    width: 85%;
+}
+table.oneday tbody tr td.ColumnEvent {
+    width; 10%;
+}
diff --git a/src/data/Web_Visually.css b/src/data/Web_Visually.css
index 6e3ce0e93..dca8893e7 100644
--- a/src/data/Web_Visually.css
+++ b/src/data/Web_Visually.css
@@ -280,10 +280,10 @@ div#navigation, div#subnavigation {
 }
 div#navigation ul, div#subnavigation ul {
     list-style:none;
-    min-width:770px;
-    height: 50px;
+    min-width: 900px;
+    height: 40px;
     margin:0;
-    padding: 0px 0px 0px 20px;
+    padding: 0px 0px 0px 6px;
     border-bottom: solid 2px #5D835F;
 }
 div#navigation ul li, div#subnavigation ul li {
@@ -291,9 +291,9 @@ div#navigation ul li, div#subnavigation ul li {
 }
 div#navigation ul li a, div#subnavigation ul li a {
     display: block;
-    padding: 12px 10px 14px 1px;
+    padding: 12px 6px 14px 1px;
     float:left;
-    font: 1em/1.5em bold italic small-caps verdana, serif;
+    font: .8em bold italic small-caps verdana, serif;
     color: #000;
     text-decoration:none;
     margin:0;
@@ -878,10 +878,13 @@ div#SourceDetail div#references ol li {
     padding-bottom:.5em;
 }
 
+
 /* Repositories
 ------------------------------------------------------ */
-div#RepositoryList { }
-
+div#RepositoryList {
+    margin: 0;
+    padding: 0;
+}
 div#RepositoryList table.repolist tbody tr td {
     background-color: #D8F3D6;
 }
@@ -899,6 +902,33 @@ div#RepositoryList table.repolist tbody tr td.ColumnName {
     background-color: #FFF;
 }
 
+/* Internet Address Book
+------------------------------------------------------ */
+div#InternetAddressBook {
+    margin: 0;
+    padding: 0;
+}
+div#InternetAddressBook table.addressbook {
+    margin: .3em 0 .3em 0;
+}
+div#InternetAddressBook table.addressbook tbody tr.BeginName {
+    border-top: solid 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td {
+    background-color: #FFF;
+    border-bottom: dashed 1px #000;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnType {
+    background-color: #D8F3D6;
+    width: 15%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnName {
+    width: 30%;
+}
+div#InternetAddressBook table.addressbook tbody tr td.ColumnLink {
+    width: 70%;
+}
+
 /* Subsections
 ----------------------------------------------------- */
 #Home, #Introduction, #Contact {
@@ -1561,7 +1591,7 @@ body#fullyearlinked able.calendar tbody tr td.sunday {
     border:solid 2px #000;
 }
 
-/* Calendar: OneDay 
+/* Calendar: OneDay
 --------------------------------------------------------------------------------- */
 body#OneDay h3 {
     color: #228A22;
diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py
index 07676480a..93485489f 100644
--- a/src/plugins/webreport/NarrativeWeb.py
+++ b/src/plugins/webreport/NarrativeWeb.py
@@ -529,14 +529,14 @@ class BasePage(object):
     def event_link(self, eventtype, handle, gid = None, up = False):
         """ createsa hyperlink for an event based on its type """
 
-        url = self.report.build_url_fname_html(handle, 'evt', up)
+        url = self.report.build_url_fname_html(handle, "evt", up)
 
 
         # if event pages are being created, then hyperlink the event type
         if self.inc_events:
             evt_hyper = Html("a", eventtype, href = url, title = eventtype)
             if not self.noid and gid:
-                evt_hyper += Html("span", " [%s] " % gid, class_ = "grampsid", 
+                evt_hyper += Html("span", " [%s]" % gid, class_ = "grampsid", 
                     inline = True)
 
             # return event hyper link to its callers
@@ -682,7 +682,7 @@ class BasePage(object):
 
     def source_link(self, handle, hyper_name, name, gid = None, up = False):
 
-        url = self.report.build_url_fname_html(handle, 'src', up)
+        url = self.report.build_url_fname_html(handle, "src", up)
 
         # begin hyperlink
         hyper = Html("a", html_escape(name), href = url, title = html_escape(name))
@@ -917,7 +917,7 @@ class BasePage(object):
                 if home_person:
                     home_person_url = self.report.build_url_fname_html(
                         home_person.handle, 
-                        'ppl', 
+                        "ppl", 
                         self.up)
 
                     home_person_name = self.get_name(home_person)
@@ -1042,17 +1042,18 @@ class BasePage(object):
                 inc_repos = False  
 
         navs = [
-            (self.report.index_fname,   _("Html|Home"),     self.report.use_home),
-            (self.report.intro_fname,   _("Introduction"),  self.report.use_intro),
-            (self.report.surname_fname, _("Surnames"),      True),
-            ('individuals',             _("Individuals"),   True),
-            ('places',                  _("Places"),        True),
-            ('events',                 _("Events"),         self.report.inc_events), 
-            ('media',                   _("Media"),         self.create_media),
-            ('download',                _("Download"),      self.report.inc_download),
-            ('contact',                 _("Contact"),       self.report.use_contact),
-            ('sources',                 SHEAD,              True),
-            ('repositories',            _("Repositories"),  inc_repos), 
+            (self.report.index_fname,   _("Html|Home"),             self.report.use_home),
+            (self.report.intro_fname,    _("Introduction"),         self.report.use_intro),
+            (self.report.surname_fname, _("Surnames"),              True),
+            ('individuals',             _("Individuals"),           True),
+            ('places',                  _("Places"),                True),
+            ('events',                  _("Events"),                self.report.inc_events), 
+            ('media',                   _("Media"),                 self.create_media),
+            ('download',                _("Download"),              self.report.inc_download),
+            ('contact',                 _("Contact"),               self.report.use_contact),
+            ('sources',                 SHEAD,                      True),
+            ('repositories',            _("Repositories"),          inc_repos),
+            ("Internet_Address_Book",   _("Internet Address Book"), self.report.add_book)
                 ]
 
         navigation = Html("div", id = 'navigation')
@@ -1090,11 +1091,14 @@ class BasePage(object):
                 if "plc" in self.report.cur_fname:
                     cs = True
             elif nav_text == _("Events"):
-                if 'evt' in self.report.cur_fname:
+                if "evt" in self.report.cur_fname:
                     cs = True 
             elif nav_text == _("Media"):
                 if "img" in self.report.cur_fname:
                     cs = True
+            elif nav_text == _("Internet Address Book"):
+                if "iab" in self.report.cur_fname:
+                    cs = True 
 
             cs = cs and 'class="CurrentSection"' or ''
             ul += (Html("li", attr = cs, inline = True) +
@@ -1254,8 +1258,7 @@ class BasePage(object):
         with Html("div", class_ = "subsection", id = "weblinks") as section:
 
             # begin web title
-            title = Html("h4", _("Web Links"), inline = True)  
-            section += title
+            section += Html("h4", _("Web Links"), inline = True)  
 
             # ordered list
             ordered = Html("ol")
@@ -1463,22 +1466,19 @@ class BasePage(object):
         return hyper
 
     def place_link(self, handle, name, gid = None, up = False):
-        url = self.report.build_url_fname_html(handle, 'plc', up)
+        url = self.report.build_url_fname_html(handle, "plc", up)
 
         hyper = Html("a", html_escape(name), href = url, title = name)
         if not self.noid and gid:
-            hyper += Html("span", " [%s] " % gid, class_ = "grampsid", inline = True)
+            hyper += Html("span", " [%s]" % gid, class_ = "grampsid", inline = True)
 
         # return hyperlink to its callers
         return hyper
 
 # ---------------------------------------------------------------------------------------
-#
 #              # Web Page Fortmatter and writer                   
-#
 # ---------------------------------------------------------------------------------------
-
-    def mywriter(self, htmlinstance, of):
+    def XHTMLWriter(self, htmlinstance, of):
         """
         Will format, write, and close the file
 
@@ -1578,7 +1578,7 @@ class IndividualListPage(BasePage):
                     first = False
 
                     # firstname column
-                    url = self.report.build_url_fname_html(person.handle, 'ppl')
+                    url = self.report.build_url_fname_html(person.handle, "ppl")
                     trow += Html("td", self.person_link(url, person, False, gid = person.gramps_id), 
                         class_ = "ColumnName")
 
@@ -1634,7 +1634,7 @@ class IndividualListPage(BasePage):
                                     if not first_family:
                                         tcell += ", "  
                                     if partner_handle in report_handle_list:
-                                        url = self.report.build_url_fname_html(partner_handle, 'ppl')
+                                        url = self.report.build_url_fname_html(partner_handle, "ppl")
                                         tcell += self.person_link(url, partner, True, gid = partner.gramps_id)
                                     else:
                                         tcell += partner_name
@@ -1678,9 +1678,12 @@ class IndividualListPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(indlistpage, of)
+        self.XHTMLWriter(indlistpage, of)
 
 class SurnamePage(BasePage):
+    """
+    This will create a list of individuals with the same surname
+    """
 
     def __init__(self, report, title, surname, person_handle_list, report_handle_list):
         BasePage.__init__(self, report, title)
@@ -1692,7 +1695,7 @@ class SurnamePage(BasePage):
         showpartner = report.options['showpartner']
         showparents = report.options['showparents']
 
-        of = self.report.create_file(name_to_md5(surname), 'srn')
+        of = self.report.create_file(name_to_md5(surname), "srn")
         self.up = True
         surnamepage, body = self.write_header("%s - %s" % (_("Surname"), surname))
 
@@ -1743,7 +1746,7 @@ class SurnamePage(BasePage):
                     tbody += trow
 
                     # firstname column
-                    url = self.report.build_url_fname_html(person.handle, 'ppl', True)
+                    url = self.report.build_url_fname_html(person.handle, "ppl", True)
                     trow += Html("td", self.person_link(url, person, False, gid = person.gramps_id),
                         class_ = "ColumnName")  
 
@@ -1795,7 +1798,7 @@ class SurnamePage(BasePage):
                                     if not first_family:
                                         tcell += ','
                                     if partner_handle in report_handle_list:
-                                        url = self.report.build_url_fname_html(partner_handle, 'ppl', True) 
+                                        url = self.report.build_url_fname_html(partner_handle, "ppl", True) 
                                         tcell += self.person_link(url, partner, True, gid = partner.gramps_id)
                                     else:
                                         tcell += partner_name
@@ -1838,7 +1841,7 @@ class SurnamePage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(surnamepage, of)  
+        self.XHTMLWriter(surnamepage, of)  
 
 class PlaceListPage(BasePage):
 
@@ -1920,7 +1923,7 @@ class PlaceListPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(placelistpage, of)
+        self.XHTMLWriter(placelistpage, of)
 
 class PlacePage(BasePage):
 
@@ -1931,7 +1934,7 @@ class PlacePage(BasePage):
         BasePage.__init__(self, report, title, place.gramps_id)
         self.src_list = src_list        # TODO verify that this is correct
 
-        of = self.report.create_file(place.get_handle(), 'plc')
+        of = self.report.create_file(place.get_handle(), "plc")
         self.up = True
         self.page_title = ReportUtils.place_name(db, place_handle)
         placepage, body = self.write_header(_("Places"))
@@ -2016,7 +2019,7 @@ class PlacePage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(placepage, of)
+        self.XHTMLWriter(placepage, of)
 
 class EventListPage(BasePage):
 
@@ -2079,7 +2082,7 @@ class EventListPage(BasePage):
 
         # send page ut for processing
         # and close the file
-        self.mywriter(eventslistpage, of)
+        self.XHTMLWriter(eventslistpage, of)
 
     def write_event_row(self, person, partner, evt_type, evt, evt_ref, first):
         """
@@ -2101,7 +2104,7 @@ class EventListPage(BasePage):
             trow.attr = 'class = "BeginName"'
 
         # get person's hyperlink
-        url = self.report.build_url_fname_html(person.handle, 'ppl', subdirs)
+        url = self.report.build_url_fname_html(person.handle, "ppl", subdirs)
         person_hyper = self.person_link(url, person, True, first, gid = person.gramps_id)
 
         # get event data
@@ -2129,7 +2132,7 @@ class EventListPage(BasePage):
         if partner is not None:
 
             # get partner hyperlink
-            url = self.report.build_url_fname_html(partner.handle, 'ppl', subdirs)
+            url = self.report.build_url_fname_html(partner.handle, "ppl", subdirs)
             partner_hyper = self.person_link(url, partner, True, gid = partner.gramps_id)
 
         # determine if same row or not?
@@ -2148,7 +2151,7 @@ class EventPage(BasePage):
         db = report.database
         subdirs = True
 
-        of = self.report.create_file(evt_ref.ref, 'evt')
+        of = self.report.create_file(evt_ref.ref, "evt")
         eventpage, body = self.write_header(_("Events"))
 
         # start event page division
@@ -2197,7 +2200,7 @@ class EventPage(BasePage):
                     tbody += trow
 
                 # get person hyperlink
-                url = self.report.build_url_fname_html(person.handle, 'ppl', self.up)
+                url = self.report.build_url_fname_html(person.handle, "ppl", self.up)
                 person_hyper = self.person_link(url, person, True, gid = person.gramps_id)
                 trow = [ Html("tr"),
                     Html("td", _('Person'), class_ = "ColumnAttribute", inline = True),
@@ -2207,7 +2210,7 @@ class EventPage(BasePage):
 
                 # display partner if type is either Marriage or Divorce
                 if partner is not None:
-                    url = self.report.build_url_fname_html(partner.handle, 'ppl', self.up)
+                    url = self.report.build_url_fname_html(partner.handle, "ppl", self.up)
                     partner_hyper = self.person_link(url, partner, True, gid = partner.gramps_id)
                     trow = [ Html("tr"),
                         Html("td", _('Partner'), class_ = "ColumnAttribute", inline = True),
@@ -2233,7 +2236,7 @@ class EventPage(BasePage):
 
         # send page out for processing
         # and close the page
-        self.mywriter(eventpage, of) 
+        self.XHTMLWriter(eventpage, of) 
 
 class MediaPage(BasePage):
 
@@ -2272,7 +2275,7 @@ class MediaPage(BasePage):
                 _name = _obj.get_primary_name().get_call_name()
                 if not _name or _name == "":
                     _name = _obj.get_primary_name().get_first_name()
-                _linkurl = report.build_url_fname_html(_obj.handle, 'ppl', True)
+                _linkurl = report.build_url_fname_html(_obj.handle, "ppl", True)
             elif classname == "Event":
                 _obj = db.get_event_from_handle( newhandle )
                 _name = _obj.get_description()
@@ -2555,7 +2558,7 @@ class MediaPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(mediapage, of)
+        self.XHTMLWriter(mediapage, of)
 
     def gallery_nav_link(self, handle, name, up = False):
 
@@ -2734,10 +2737,10 @@ class SurnameListPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(surnamelistpage, of)  
+        self.XHTMLWriter(surnamelistpage, of)  
 
     def surname_link(self, fname, name, opt_val = None, up = False):
-        url = self.report.build_url_fname_html(fname, 'srn', up)
+        url = self.report.build_url_fname_html(fname, "srn", up)
         hyper = Html("a", name, href = url, title = name, inline = True)
         if opt_val is not None:
             hyper += opt_val
@@ -2780,7 +2783,7 @@ class IntroductionPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(intropage, of)
+        self.XHTMLWriter(intropage, of)
 
 class HomePage(BasePage):
     """
@@ -2817,7 +2820,7 @@ class HomePage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(homepage, of)  
+        self.XHTMLWriter(homepage, of)  
 
 class SourceListPage(BasePage):
 
@@ -2885,7 +2888,7 @@ class SourceListPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(sourcelistpage, of)
+        self.XHTMLWriter(sourcelistpage, of)
 
 class SourcePage(BasePage):
 
@@ -2895,7 +2898,7 @@ class SourcePage(BasePage):
         source = db.get_source_from_handle(handle)
         BasePage.__init__(self, report, title, source.gramps_id)
 
-        of = self.report.create_file(source.get_handle(), 'src')
+        of = self.report.create_file(source.get_handle(), "src")
         self.up = True
         sourcepage, body = self.write_header(_('Sources'))
 
@@ -2956,7 +2959,7 @@ class SourcePage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(sourcepage, of)
+        self.XHTMLWriter(sourcepage, of)
 
 class MediaListPage(BasePage):
 
@@ -3025,7 +3028,7 @@ class MediaListPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(medialistpage, of)
+        self.XHTMLWriter(medialistpage, of)
 
     def media_ref_link(self, handle, name, up = False):
 
@@ -3168,7 +3171,7 @@ class DownloadPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(downloadpage, of)
+        self.XHTMLWriter(downloadpage, of)
 
 class ContactPage(BasePage):
 
@@ -3233,7 +3236,7 @@ class ContactPage(BasePage):
 
         # send page out for porcessing
         # and close the file
-        self.mywriter(contactpage, of)
+        self.XHTMLWriter(contactpage, of)
 
 class IndividualPage(BasePage):
     """
@@ -3257,7 +3260,7 @@ class IndividualPage(BasePage):
         self.attribute_list = attribute_list
         db = report.database
 
-        of = self.report.create_file(person.handle, 'ppl')
+        of = self.report.create_file(person.handle, "ppl")
         self.up = True
         indivdetpage, body = self.write_header(self.sort_name)
 
@@ -3362,7 +3365,7 @@ class IndividualPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(indivdetpage, of)
+        self.XHTMLWriter(indivdetpage, of)
 
     def draw_box(self, center, col, person):
         db = self.report.database
@@ -3395,7 +3398,7 @@ class IndividualPage(BasePage):
                         thumbnailUrl = "/".join(['..']*3 + [thumbnailUrl])
                         if ( Utils.win ):
                             thumbnailUrl = thumbnailUrl.replace('\\',"/")
-            url = self.report.build_url_fname_html(person.handle, 'ppl', True)
+            url = self.report.build_url_fname_html(person.handle, "ppl", True)
             boxbg += self.person_link(url, person, name_style = True, 
                 thumbnailUrl=thumbnailUrl)
         else:
@@ -3875,7 +3878,7 @@ class IndividualPage(BasePage):
         gid = child.gramps_id
         list = Html("li")
         if child_handle in self.ind_list:
-            url = self.report.build_url_fname_html(child_handle, 'ppl', True)
+            url = self.report.build_url_fname_html(child_handle, "ppl", True)
             list += self.person_link(url, child, True, gid = gid)
 
         else:
@@ -3896,7 +3899,7 @@ class IndividualPage(BasePage):
 
         gid = person.gramps_id
         if handle in self.ind_list:
-            url = self.report.build_url_fname_html(handle, 'ppl', True)
+            url = self.report.build_url_fname_html(handle, "ppl", True)
             tcell2 += self.person_link(url, person, True, gid = gid)
         else:
             person_name = self.get_name(person)
@@ -4248,7 +4251,7 @@ class IndividualPage(BasePage):
         # display partner's name
         if partner_handle:
             if partner_handle in self.ind_list:
-                url = self.report.build_url_fname_html(partner_handle, 'ppl', True)
+                url = self.report.build_url_fname_html(partner_handle, "ppl", True)
                 tcell += self.person_link(url, partner, True, gid = partner.gramps_id)
             else:
                 tcell += partner_name
@@ -4273,7 +4276,7 @@ class IndividualPage(BasePage):
 
         person_name = self.get_name(person)
         if person.handle in self.ind_list:
-            url = self.report.build_url_fname_html(person.handle, 'ppl', True)
+            url = self.report.build_url_fname_html(person.handle, "ppl", True)
             hyper = self.person_link(url, person, name_style = True)
         else:
             hyper = person_name
@@ -4396,8 +4399,8 @@ class RepositoryListPage(BasePage):
         BasePage.__init__(self, report, title)
         db = report.database
 
-        of = self.report.create_file('repositories')
-        repolistpage, body = self.write_header(_('Repositories'))
+        of = self.report.create_file("repositories")
+        repolistpage, body = self.write_header(_("Repositories"))
 
         # begin RepositoryList division
         with Html("div", class_ = "content", id = "RepositoryList") as repositorylist:
@@ -4462,14 +4465,14 @@ class RepositoryListPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(repolistpage, of)
+        self.XHTMLWriter(repolistpage, of)
 
 class RepositoryPage(BasePage):
     """
     will create the individual Repository Pages
     """
 
-    def __init__(self, report, title, repo, handle):
+    def __init__(self, report, title, repo, handle, gid = None):
         BasePage.__init__(self, report, title)
         db = report.database
 
@@ -4495,11 +4498,11 @@ class RepositoryPage(BasePage):
                     ]
                 table += trow
 
-                if not self.noid:
+                if not self.noid and gid:
                     # repo gramps id
                     trow = [ Html("tr"),
                         Html("td", _("GRAMPS ID"), class_ = "ColumnType", inline = True),
-                        Html("td", repo.gramps_id, class_ = "ColumnAttribute", inline = True)
+                        Html("td", gid, class_ = "ColumnAttribute", inline = True)
                         ]
                     table += trow
 
@@ -4525,7 +4528,107 @@ class RepositoryPage(BasePage):
 
         # send page out for processing
         # and close the file
-        self.mywriter(repositorypage, of)
+        self.XHTMLWriter(repositorypage, of)
+
+class InternetAddressBook(BasePage):
+    """
+    Will Create an Internet Address Book of people's web sites and email addresses
+    """
+
+    def __init__(self, report, title, ind_list):
+        BasePage.__init__(self, report, title)
+        db = report.database
+
+        # Name the file, and create it
+        of = self.report.create_file("Internet_Address_Book")
+
+        # Add xml, doctype, meta and stylesheets
+        iabpage, body = self.write_header(_("Internet Address Book"))
+
+        # begin page division
+        with Html("div", class_ = "content", id = "InternetAddressBook") as addbook:
+            body += addbook
+
+            # Internet Address Book Page message
+            msg = _("This page contains an index of all the individuals in the "
+                          "database, sorted by their GRAMPS ID. Selecting the person&#8217;s "
+                          "name will take you to that person&#8217;s individual page.  "
+                          "Selecting a link will take you to their website or e-mail address.")
+            addbook += Html("p", msg, id = "description")
+
+            # begin Address Book table
+            with Html("table", class_ = "infolist addressbook") as table:
+                addbook += table
+
+                thead = Html("thead")
+                table += thead
+
+                trow = Html("tr") + (
+                    Html("th", THEAD, class_ = "ColumnType", inline = True),
+                    Html("th", _("Name"), class_ = "ColumnName", inline = True),
+                    Html("th", _("Link"), class_ = "ColumnLink", inline = True)
+                    )
+                thead += trow
+
+                tbody = Html("tbody")
+                table += tbody
+
+                for person_handle in ind_list:
+
+                    person = db.get_person_from_handle(person_handle)
+                    urllist = person.get_url_list()
+
+                    first = True
+                    for url in urllist:
+
+                        trow = Html("tr")
+                        tbody += trow
+
+                        # Internet link type
+                        trow += Html("td", str(url.get_type() ), class_ = "ColumnType", inline = True)
+
+                        if first:
+                            trow.attr = 'class = "BeginName"'
+
+                            person_url = self.report.build_url_fname_html(person.handle, "ppl", False)
+                            person_hyper = self.person_link(person_url, person, True, gid = person.gramps_id)
+                        else:
+                            person_hyper = "&nbsp;"
+                        first = False
+
+                        trow += Html("td", person_hyper, class_ = "ColumnName")
+
+                        uri = url.get_path()
+                        descr = url.get_description()
+                        if not descr:
+                            descr = uri
+
+                        if url.get_type() == UrlType.EMAIL and not uri.startswith("mailto:"):
+                            trow += Html("td", class_ = "ColumnLink") + (
+                                Html("a",descr,  href = 'mailto: %s' % url)
+                                ) 
+
+                        elif url.get_type() == UrlType.WEB_HOME and not uri.startswith("http://"):
+                            trow += Html("td", class_ = "ColumnLink") + (
+                                Html("a", descr, href = 'http://%s' % url)
+                                )
+
+                        elif url.get_type() == UrlType.WEB_FTP and not uri.startswith("ftp://"):
+                            trow += Html("td", class_ = "ColumnLink") + (
+                                Html("a", descr, href = 'ftp://%s' % url)
+                                )
+
+                        else:
+                            trow += Html("td", class_ = "ColumnLink") + (
+                                Html("a", descr, href = url)
+                                )
+
+        # Add footer and clearline
+        footer = self.write_footer()
+        body += (fullclear, footer)
+
+        # write the file and close it
+        self.XHTMLWriter(iabpage, of)   
 
 class NavWebReport(Report):
     
@@ -4610,6 +4713,9 @@ class NavWebReport(Report):
         # whether to display children in birthorder or entry order?
         self.birthorder = self.options['birthorder']
 
+        # get option for Internet Address Book
+        self.add_book = self.options["add_book"]
+
         if self.use_home:
             self.index_fname = "index"
             self.surname_fname = "surnames"
@@ -4731,6 +4837,11 @@ class NavWebReport(Report):
         if len(repolist):
             self.repository_pages(repolist)
 
+
+        # build class InternetAddressBook
+        if self.add_book:
+            self.address_book_page(ind_list)
+
         # if an archive is being used, close it?
         if self.archive:
             self.archive.close()
@@ -4937,7 +5048,7 @@ class NavWebReport(Report):
         * field 6: date of death or burial (optional)
         * field 7: place of death or burial (optional) 
         """
-        url = self.build_url_fname_html(person.handle, 'ppl')
+        url = self.build_url_fname_html(person.handle, "ppl")
         surname = person.get_primary_name().get_surname()
         fullname = person.get_primary_name().get_gedcom_name()
 
@@ -5069,15 +5180,18 @@ class NavWebReport(Report):
         # RepositoryListPage Class
         RepositoryListPage(self, self.title, repos_dict, keys)
 
-        index = 0
         for index, key in enumerate(keys):
             (repo, handle) = repos_dict[key]
 
             # RepositoryPage Class
-            RepositoryPage(self, self.title, repo, handle)
+            RepositoryPage(self, self.title, repo, handle, repo.gramps_id)
 
             self.progress.step()
 
+    def address_book_page(self, ind_list):
+
+        InternetAddressBook(self, self.title, ind_list)
+
     def add_image(self, option_name, height=0):
         pic_id = self.options[option_name]
         if pic_id:
@@ -5562,6 +5676,10 @@ class NavWebOptions(MenuReportOptions):
         inc_gendex.set_help(_('Whether to include a GENDEX file or not'))
         menu.add_option(category_name, 'inc_gendex', inc_gendex)
 
+        add_book = BooleanOption(_("Include an Internet Address Book Page"), True)
+        add_book.set_help(_("Whether to add an Internet Address Book or not?"))
+        menu.add_option(category_name, "add_book", add_book)
+
     def __archive_changed(self):
         """
         Update the change of storage: archive or directory