Index: tika-core/src/main/java/org/apache/tika/metadata/XMPDM.java
===================================================================
--- tika-core/src/main/java/org/apache/tika/metadata/XMPDM.java	(revision 1613819)
+++ tika-core/src/main/java/org/apache/tika/metadata/XMPDM.java	(working copy)
@@ -60,6 +60,21 @@
     Property ARTIST = Property.externalText("xmpDM:artist");
 
     /**
+     * "The name of the album artist or group for compilation albums."
+     */
+    Property ALBUM_ARTIST = Property.externalText("xmpDM:albumArtist");
+
+    /**
+     * "The disc number for part of an album set."
+     */
+    Property DISC_NUMBER = Property.externalInteger("xmpDM:discNumber");
+
+    /**
+     * "An album created by various artists."
+     */
+    Property COMPILATION = Property.externalInteger("xmpDM:compilation");
+
+    /**
      * "The date and time when the audio was last modified."
      */
     Property AUDIO_MOD_DATE = Property.internalDate("xmpDM:audioModDate");
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/CompositeTagHandler.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/CompositeTagHandler.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/CompositeTagHandler.java	(working copy)
@@ -113,4 +113,32 @@
         return null;
     }
 
+    public String getAlbumArtist() {
+        for (ID3Tags tag : tags) {
+            if (tag.getAlbumArtist() != null) {
+                return tag.getAlbumArtist();
+            }
+        }
+        return null;
+    }
+
+    public String getDisc() {
+        for (ID3Tags tag : tags) {
+            if (tag.getDisc() != null) {
+                return tag.getDisc();
+            }
+        }
+        return null;
+    }
+
+    public String getCompilation() {
+        for (ID3Tags tag : tags) {
+            if (tag.getCompilation() != null) {
+                return tag.getCompilation();
+            }
+        }
+        return null;
+    }
+
+
 }
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3Tags.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3Tags.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3Tags.java	(working copy)
@@ -178,6 +178,12 @@
     
     String getComposer();
 
+    String getAlbumArtist(); // compilation album group
+
+    String getDisc(); // part of set
+
+    String getCompilation(); // part of compilation
+    
     /**
      * Retrieves the comments, if any.
      * Files may have more than one comment, but normally only 
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v1Handler.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v1Handler.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v1Handler.java	(working copy)
@@ -40,6 +40,10 @@
     private ID3Comment comment;
     private String genre;
     private String trackNumber;
+    // No equavalents for v1
+    private String albumArtist;
+    private String disc;
+    private String compilation;
 
     boolean found = false;
 
@@ -120,6 +124,18 @@
         return null;
     }
 
+    public String getAlbumArtist() {
+		return albumArtist;
+	}
+
+	public String getDisc() {
+		return disc;
+	}
+
+	public String getCompilation() {
+		return compilation;
+	}
+
     /**
      * Returns the identified ISO-8859-1 substring from the given byte buffer.
      * The return value is the zero-terminated substring retrieved from
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v22Handler.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v22Handler.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v22Handler.java	(working copy)
@@ -39,6 +39,9 @@
     private String composer;
     private String genre;
     private String trackNumber;
+    private String albumArtist;
+    private String disc;
+    private String compilation;
     private List<ID3Comment> comments = new ArrayList<ID3Comment>();
 
     public ID3v22Handler(ID3v2Frame frame)
@@ -50,6 +53,8 @@
                 title = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TP1")) {
                 artist = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TP2")) {
+                albumArtist = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TAL")) {
                 album = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TYE")) {
@@ -60,6 +65,10 @@
                 comments.add( getComment(tag.data, 0, tag.data.length) ); 
             } else if (tag.name.equals("TRK")) {
                 trackNumber = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TPA")) {
+                disc = getTagString(tag.data, 0, tag.data.length); 
+            // } else if (tag.name.equals("???")) { // No tag for ID3v22
+            //     compilation = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TCO")) {
                 genre = extractGenre( getTagString(tag.data, 0, tag.data.length) );
             }
@@ -129,6 +138,18 @@
         return trackNumber;
     }
 
+    public String getAlbumArtist() {
+		return albumArtist;
+	}
+
+	public String getDisc() {
+		return disc;
+	}
+
+	public String getCompilation() {
+		return compilation;
+	}
+
     private class RawV22TagIterator extends RawTagIterator {
         private RawV22TagIterator(ID3v2Frame frame) {
             frame.super(3, 3, 1, 0);
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v23Handler.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v23Handler.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v23Handler.java	(working copy)
@@ -39,6 +39,9 @@
     private String composer;
     private String genre;
     private String trackNumber;
+    private String albumArtist;
+    private String disc;
+    private String compilation;
     private List<ID3Comment> comments = new ArrayList<ID3Comment>();
 
     public ID3v23Handler(ID3v2Frame frame)
@@ -50,6 +53,8 @@
                 title = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TPE1")) {
                 artist = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TPE2")) {
+                albumArtist = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TALB")) {
                 album = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TYER")) {
@@ -60,6 +65,10 @@
                 comments.add( getComment(tag.data, 0, tag.data.length) ); 
             } else if (tag.name.equals("TRCK")) {
                 trackNumber = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TPOS")) {
+                disc = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TCMP")) {
+                compilation = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TCON")) {
                 genre = ID3v22Handler.extractGenre( getTagString(tag.data, 0, tag.data.length) );
             }
@@ -109,6 +118,18 @@
         return trackNumber;
     }
 
+    public String getAlbumArtist() {
+		return albumArtist;
+	}
+
+	public String getDisc() {
+		return disc;
+	}
+
+	public String getCompilation() {
+		return compilation;
+	}
+
     private class RawV23TagIterator extends RawTagIterator {
         private RawV23TagIterator(ID3v2Frame frame) {
             frame.super(4, 4, 1, 2);
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v24Handler.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v24Handler.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/ID3v24Handler.java	(working copy)
@@ -40,6 +40,9 @@
     private String composer;
     private String genre;
     private String trackNumber;
+    private String albumArtist;
+    private String disc;
+    private String compilation;
     private List<ID3Comment> comments = new ArrayList<ID3Comment>();
 
     public ID3v24Handler(ID3v2Frame frame)
@@ -51,6 +54,8 @@
                 title = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TPE1")) {
                 artist = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TPE2")) {
+                albumArtist = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TALB")) {
                 album = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TYER")) {
@@ -65,6 +70,10 @@
                 comments.add( getComment(tag.data, 0, tag.data.length) ); 
             } else if (tag.name.equals("TRCK")) {
                 trackNumber = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TPOS")) {
+                disc = getTagString(tag.data, 0, tag.data.length); 
+            } else if (tag.name.equals("TCMP")) {
+                compilation = getTagString(tag.data, 0, tag.data.length); 
             } else if (tag.name.equals("TCON")) {
                genre = ID3v22Handler.extractGenre( getTagString(tag.data, 0, tag.data.length) );
             }
@@ -114,7 +123,19 @@
         return trackNumber;
     }
 
-    private class RawV24TagIterator extends RawTagIterator {
+    public String getAlbumArtist() {
+		return albumArtist;
+	}
+
+	public String getDisc() {
+		return disc;
+	}
+
+	public String getCompilation() {
+		return compilation;
+	}
+
+	private class RawV24TagIterator extends RawTagIterator {
         private RawV24TagIterator(ID3v2Frame frame) {
             frame.super(4, 4, 1, 2);
         }
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java	(working copy)
@@ -81,6 +81,9 @@
            metadata.set(XMPDM.RELEASE_DATE, tag.getYear());
            metadata.set(XMPDM.GENRE, tag.getGenre());
            metadata.set(XMPDM.DURATION, audioAndTags.duration);
+           metadata.set(XMPDM.ALBUM_ARTIST, tag.getAlbumArtist());
+           metadata.set(XMPDM.DISC_NUMBER, tag.getDisc());
+           metadata.set(XMPDM.COMPILATION, tag.getCompilation());
 
            List<String> comments = new ArrayList<String>();
            for (ID3Comment comment : tag.getComments()) {
Index: tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
===================================================================
--- tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java	(revision 1613819)
+++ tika-parsers/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java	(working copy)
@@ -55,7 +55,10 @@
 import com.coremedia.iso.boxes.sampleentry.AudioSampleEntry;
 import com.googlecode.mp4parser.boxes.apple.AppleAlbumBox;
 import com.googlecode.mp4parser.boxes.apple.AppleArtistBox;
+import com.googlecode.mp4parser.boxes.apple.AppleArtist2Box;
 import com.googlecode.mp4parser.boxes.apple.AppleCommentBox;
+import com.googlecode.mp4parser.boxes.apple.AppleCompilationBox;
+import com.googlecode.mp4parser.boxes.apple.AppleDiskNumberBox;
 import com.googlecode.mp4parser.boxes.apple.AppleEncoderBox;
 import com.googlecode.mp4parser.boxes.apple.AppleGenreBox;
 import com.googlecode.mp4parser.boxes.apple.AppleNameBox;
@@ -205,7 +208,7 @@
 
                // Check for iTunes Metadata
                // See http://atomicparsley.sourceforge.net/mpeg-4files.html and
-               //  http://code.google.com/p/mp4v2/wiki/iTunesMetadata for more on these
+               // http://code.google.com/p/mp4v2/wiki/iTunesMetadata for more on these
                AppleItemListBox apple = getOrNull(meta, AppleItemListBox.class);
                if (apple != null) {
                   // Title
@@ -217,6 +220,10 @@
                   addMetadata(TikaCoreProperties.CREATOR, metadata, artist);
                   addMetadata(XMPDM.ARTIST, metadata, artist);
 
+                  // Album Artist
+                  AppleArtist2Box artist2 = getOrNull(apple, AppleArtist2Box.class);
+                  addMetadata(XMPDM.ALBUM_ARTIST, metadata, artist2);
+
                   // Album
                   AppleAlbumBox album = getOrNull(apple, AppleAlbumBox.class);
                   addMetadata(XMPDM.ALBUM, metadata, album);
@@ -242,6 +249,20 @@
                      //metadata.set(XMPDM.NUMBER_OF_TRACKS, trackNum.getB()); // TODO
                   }
 
+                  // Disc number
+                  AppleDiskNumberBox discNum = getOrNull(apple, AppleDiskNumberBox.class);
+                  if (discNum != null) {
+                     metadata.set(XMPDM.DISC_NUMBER, discNum.getA());
+                  }
+
+                  // Compilation
+                  AppleCompilationBox compilation = getOrNull(apple, AppleCompilationBox.class);
+                  if (compilation != null) {
+                	  Object obj = compilation.getValue();
+                	  System.out.println( "Obj type=" + obj.getClass().getName() + ", value=" +compilation.getValue());
+                      metadata.set(XMPDM.COMPILATION, (int) compilation.getValue());
+                  }
+
                   // Comment
                   AppleCommentBox comment = getOrNull(apple, AppleCommentBox.class);
                   addMetadata(XMPDM.LOG_COMMENT, metadata, comment);
Index: tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java	(revision 1613819)
+++ tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java	(working copy)
@@ -124,11 +124,14 @@
         // Check XMPDM-typed audio properties
         assertEquals("Test Album", metadata.get(XMPDM.ALBUM));
         assertEquals("Test Artist", metadata.get(XMPDM.ARTIST));
+        assertEquals("Test Album Artist", metadata.get(XMPDM.ALBUM_ARTIST));
         assertEquals(null, metadata.get(XMPDM.COMPOSER));
         assertEquals("2008", metadata.get(XMPDM.RELEASE_DATE));
         assertEquals("Rock", metadata.get(XMPDM.GENRE));
         assertEquals("XXX - ID3v1 Comment\nTest Comment", metadata.get(XMPDM.LOG_COMMENT.getName()));
         assertEquals("1", metadata.get(XMPDM.TRACK_NUMBER));
+        assertEquals("1/1", metadata.get(XMPDM.DISC_NUMBER));
+        assertEquals("1", metadata.get(XMPDM.COMPILATION));
         
         assertEquals("44100", metadata.get(XMPDM.AUDIO_SAMPLE_RATE));
         assertEquals("Mono", metadata.get(XMPDM.AUDIO_CHANNEL_TYPE));
@@ -208,6 +211,16 @@
         assertEquals("44100", metadata.get("samplerate"));
         assertEquals("1", metadata.get("channels"));
         checkDuration(metadata, 2);
+
+        // Check XMPDM-typed audio properties
+        assertEquals("Test Album", metadata.get(XMPDM.ALBUM));
+        assertEquals("Test Artist", metadata.get(XMPDM.ARTIST));
+        assertEquals("Test Album Artist", metadata.get(XMPDM.ALBUM_ARTIST));
+        assertEquals(null, metadata.get(XMPDM.COMPOSER));
+        assertEquals("2008", metadata.get(XMPDM.RELEASE_DATE));
+        assertEquals("Rock", metadata.get(XMPDM.GENRE));
+        assertEquals("1", metadata.get(XMPDM.DISC_NUMBER));
+        assertEquals("1", metadata.get(XMPDM.COMPILATION));
     }
     
     /**
Index: tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java
===================================================================
--- tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java	(revision 1613819)
+++ tika-parsers/src/test/java/org/apache/tika/parser/mp4/MP4ParserTest.java	(working copy)
@@ -81,7 +81,11 @@
         assertEquals("Test Genre", metadata.get(XMPDM.GENRE));
         assertEquals("Test Comments", metadata.get(XMPDM.LOG_COMMENT.getName()));
         assertEquals("1", metadata.get(XMPDM.TRACK_NUMBER));
+        assertEquals("Test Album Artist", metadata.get(XMPDM.ALBUM_ARTIST));
+        assertEquals("6", metadata.get(XMPDM.DISC_NUMBER));
+        assertEquals("0", metadata.get(XMPDM.COMPILATION));
         
+        
         assertEquals("44100", metadata.get(XMPDM.AUDIO_SAMPLE_RATE));
         //assertEquals("Stereo", metadata.get(XMPDM.AUDIO_CHANNEL_TYPE)); // TODO Extract
         assertEquals("M4A", metadata.get(XMPDM.AUDIO_COMPRESSOR));
Index: tika-parsers/src/test/resources/test-documents/testMP3id3v2.mp3
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: tika-parsers/src/test/resources/test-documents/testMP3id3v24.mp3
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
