diff --git src/java/org/apache/hadoop/ApiStability_Evolving.java src/java/org/apache/hadoop/ApiStability_Evolving.java
new file mode 100644
index 0000000..dec638e
--- /dev/null
+++ src/java/org/apache/hadoop/ApiStability_Evolving.java
@@ -0,0 +1,11 @@
+package org.apache.hadoop;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+
+/**
+ * This API is evolving and may change in the future with some warning
+ */
+@Inherited
+@Documented
+public @interface ApiStability_Evolving {}
diff --git src/java/org/apache/hadoop/ApiStability_Stable.java src/java/org/apache/hadoop/ApiStability_Stable.java
new file mode 100644
index 0000000..e49f8a3
--- /dev/null
+++ src/java/org/apache/hadoop/ApiStability_Stable.java
@@ -0,0 +1,12 @@
+package org.apache.hadoop;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+
+
+/**
+ * This API may be relied upon to change only in major version upgrades.
+ */
+@Inherited
+@Documented
+public @interface ApiStability_Stable {}
diff --git src/java/org/apache/hadoop/ApiStability_Unstable.java src/java/org/apache/hadoop/ApiStability_Unstable.java
new file mode 100644
index 0000000..a892177
--- /dev/null
+++ src/java/org/apache/hadoop/ApiStability_Unstable.java
@@ -0,0 +1,11 @@
+package org.apache.hadoop;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+
+/**
+ * This API is currently under development and may change without notice.
+ */
+@Inherited
+@Documented
+public @interface ApiStability_Unstable {}
diff --git src/java/org/apache/hadoop/Audience_LimitedPrivate.java src/java/org/apache/hadoop/Audience_LimitedPrivate.java
new file mode 100644
index 0000000..ec16982
--- /dev/null
+++ src/java/org/apache/hadoop/Audience_LimitedPrivate.java
@@ -0,0 +1,11 @@
+package org.apache.hadoop;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+
+/**
+ * This API is intended for use only with Hadoop and associated projects.
+ */
+@Inherited
+@Documented
+public @interface Audience_LimitedPrivate {}
diff --git src/java/org/apache/hadoop/Audience_ProjectPrivate.java src/java/org/apache/hadoop/Audience_ProjectPrivate.java
new file mode 100644
index 0000000..916e940
--- /dev/null
+++ src/java/org/apache/hadoop/Audience_ProjectPrivate.java
@@ -0,0 +1,11 @@
+package org.apache.hadoop;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+
+/**
+ * This API is for use only within Hadoop itself
+ */
+@Inherited
+@Documented
+public @interface Audience_ProjectPrivate {}
diff --git src/java/org/apache/hadoop/Audience_Public.java src/java/org/apache/hadoop/Audience_Public.java
new file mode 100644
index 0000000..1d4037a
--- /dev/null
+++ src/java/org/apache/hadoop/Audience_Public.java
@@ -0,0 +1,11 @@
+package org.apache.hadoop;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+
+/**
+ * This API is meant for end users and application developers
+ */
+@Inherited
+@Documented
+public @interface Audience_Public {}
diff --git src/java/org/apache/hadoop/fs/FileSystem.java src/java/org/apache/hadoop/fs/FileSystem.java
index 0049410..02e8e1d 100644
--- src/java/org/apache/hadoop/fs/FileSystem.java
+++ src/java/org/apache/hadoop/fs/FileSystem.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -40,6 +39,10 @@ import javax.security.auth.login.LoginException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.ApiStability_Evolving;
+import org.apache.hadoop.ApiStability_Stable;
+import org.apache.hadoop.Audience_LimitedPrivate;
+import org.apache.hadoop.Audience_Public;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.fs.permission.FsPermission;
@@ -66,6 +69,8 @@ import org.apache.hadoop.util.ReflectionUtils;
  * The local implementation is {@link LocalFileSystem} and distributed
  * implementation is DistributedFileSystem.
  *****************************************************************/
+@Audience_Public
+@ApiStability_Stable
 public abstract class FileSystem extends Configured implements Closeable {
   public static final String FS_DEFAULT_NAME_KEY = "fs.default.name";
 
@@ -340,6 +345,8 @@ public abstract class FileSystem extends Configured implements Closeable {
    *
    * The FileSystem will simply return an elt containing 'localhost'.
    */
+  @Audience_LimitedPrivate
+  @ApiStability_Evolving
   public BlockLocation[] getFileBlockLocations(FileStatus file, 
       long start, long len) throws IOException {
     if (file == null) {
@@ -736,6 +743,7 @@ public abstract class FileSystem extends Configured implements Closeable {
    * @return the statuses of the files/directories in the given patch
    * @throws IOException
    */
+  @ApiStability_Evolving
   public abstract FileStatus[] listStatus(Path f) throws IOException;
     
   /*
@@ -866,6 +874,7 @@ public abstract class FileSystem extends Configured implements Closeable {
    * @return an array of paths that match the path pattern
    * @throws IOException
    */
+  @ApiStability_Evolving
   public FileStatus[] globStatus(Path pathPattern) throws IOException {
     return globStatus(pathPattern, DEFAULT_FILTER);
   }
@@ -1582,6 +1591,7 @@ public abstract class FileSystem extends Configured implements Closeable {
     }
   }
   
+  @Audience_LimitedPrivate
   public static final class Statistics {
     private final String scheme;
     private AtomicLong bytesRead = new AtomicLong();
@@ -1671,6 +1681,7 @@ public abstract class FileSystem extends Configured implements Closeable {
    * @param cls the class to lookup
    * @return a statistics object
    */
+  @Audience_LimitedPrivate
   public static synchronized 
   Statistics getStatistics(String scheme, Class<? extends FileSystem> cls) {
     Statistics result = statisticsTable.get(cls);
@@ -1681,12 +1692,14 @@ public abstract class FileSystem extends Configured implements Closeable {
     return result;
   }
   
+  @Audience_LimitedPrivate
   public static synchronized void clearStatistics() {
     for(Statistics stat: statisticsTable.values()) {
       stat.reset();
     }
   }
 
+  @Audience_LimitedPrivate
   public static synchronized
   void printStatistics() throws IOException {
     for (Map.Entry<Class<? extends FileSystem>, Statistics> pair: 
