diff --git a/.gitignore b/.gitignore
deleted file mode 100644
--- a/.gitignore
+++ /dev/null
@@ -1,1 +0,0 @@
-.project
diff --git a/.project b/.project
deleted file mode 100644
--- a/.project
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>xhtml-3000.2.0.5</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-	</buildSpec>
-	<natures>
-	</natures>
-</projectDescription>
diff --git a/Text/XHtml/Frameset.hs b/Text/XHtml/Frameset.hs
--- a/Text/XHtml/Frameset.hs
+++ b/Text/XHtml/Frameset.hs
@@ -7,11 +7,11 @@
      -- * Data types
      Html, HtmlAttr,
      -- * Classes
-     HTML(..), ADDATTRS(..),
+     HTML(..), ADDATTRS(..), CHANGEATTRS(..),
      -- * Primitives and basic combinators
      (<<), concatHtml, (+++), 
      noHtml, isNoHtml, tag, itag,
-     emptyAttr, intAttr, strAttr, htmlAttr,
+     htmlAttrPair, emptyAttr, intAttr, strAttr, htmlAttr,
      primHtml, 
      -- * Rendering
      showHtml, renderHtml, prettyHtml, 
diff --git a/Text/XHtml/Internals.hs b/Text/XHtml/Internals.hs
--- a/Text/XHtml/Internals.hs
+++ b/Text/XHtml/Internals.hs
@@ -46,6 +46,10 @@
 data HtmlAttr = HtmlAttr String String
 
 
+htmlAttrPair :: HtmlAttr -> (String,String)
+htmlAttrPair (HtmlAttr n v) = (n,v)
+
+
 newtype Html = Html { getHtmlElements :: [HtmlElement] }
 
 
@@ -93,14 +97,28 @@
 class ADDATTRS a where
       (!) :: a -> [HtmlAttr] -> a
 
+-- | CHANGEATTRS is a more expressive alternative to ADDATTRS
+class CHANGEATTRS a where
+      changeAttrs :: a -> ([HtmlAttr]->[HtmlAttr]) -> a
+
 instance (ADDATTRS b) => ADDATTRS (a -> b) where
-      fn ! attr = \ arg -> fn arg ! attr
+      fn ! attr        = \ arg -> fn arg ! attr
 
+instance (CHANGEATTRS b) => CHANGEATTRS (a -> b) where
+      changeAttrs fn f = \ arg -> changeAttrs (fn arg) f
+
 instance ADDATTRS Html where
       (Html htmls) ! attr = Html (map addAttrs htmls)
         where
               addAttrs (html@(HtmlTag { markupAttrs = attrs }) )
-                              = html { markupAttrs = attrs ++ attr }
+                            = html { markupAttrs = attrs ++ attr }
+              addAttrs html = html
+
+instance CHANGEATTRS Html where
+      changeAttrs (Html htmls) f = Html (map addAttrs htmls)
+        where
+              addAttrs (html@(HtmlTag { markupAttrs = attrs }) )
+                            = html { markupAttrs = f attrs }
               addAttrs html = html
 
 
diff --git a/Text/XHtml/Strict.hs b/Text/XHtml/Strict.hs
--- a/Text/XHtml/Strict.hs
+++ b/Text/XHtml/Strict.hs
@@ -7,11 +7,11 @@
      -- * Data types
      Html, HtmlAttr,
      -- * Classes
-     HTML(..), ADDATTRS(..),
+     HTML(..), ADDATTRS(..), CHANGEATTRS(..),
      -- * Primitives and basic combinators
      (<<), concatHtml, (+++), 
      noHtml, isNoHtml, tag, itag,
-     emptyAttr, intAttr, strAttr, htmlAttr,
+     htmlAttrPair, emptyAttr, intAttr, strAttr, htmlAttr,
      primHtml, stringToHtmlString,
      docType,
      -- * Rendering
diff --git a/Text/XHtml/Transitional.hs b/Text/XHtml/Transitional.hs
--- a/Text/XHtml/Transitional.hs
+++ b/Text/XHtml/Transitional.hs
@@ -7,11 +7,11 @@
      -- * Data types
      Html, HtmlAttr,
      -- * Classes
-     HTML(..), ADDATTRS(..),
+     HTML(..), ADDATTRS(..), CHANGEATTRS(..),
      -- * Primitives and basic combinators
      (<<), concatHtml, (+++), 
      noHtml, isNoHtml, tag, itag,
-     emptyAttr, intAttr, strAttr, htmlAttr,
+     htmlAttrPair, emptyAttr, intAttr, strAttr, htmlAttr,
      primHtml, 
      -- * Rendering
      showHtml, renderHtml, prettyHtml, 
diff --git a/xhtml.cabal b/xhtml.cabal
--- a/xhtml.cabal
+++ b/xhtml.cabal
@@ -1,5 +1,5 @@
 Name:               xhtml
-Version:            3000.2.0.5
+Version:            3000.2.1
 Copyright:          Bjorn Bringert 2004-2006, Andy Gill and the Oregon
                     Graduate Institute of Science and Technology, 1999-2001
 Maintainer:         Chris Dornan <chris@chrisdornan.com>
@@ -18,7 +18,7 @@
 
 Source-repository head
     type:           git
-    location:       git@github.com:haskell/xhtml.git
+    location:       https://github.com/haskell/xhtml
 
 library 
     Build-depends:  base >= 4.0 && < 5.0
