diff --git a/audio/4.0/config/api/current.txt b/audio/4.0/config/api/current.txt
index f0814bf..d59cade 100644
--- a/audio/4.0/config/api/current.txt
+++ b/audio/4.0/config/api/current.txt
@@ -1,3 +1,4 @@
+// Signature format: 2.0
 package audio.policy.configuration.V4_0 {
 
   public class AttachedDevices {
@@ -5,10 +6,8 @@
     method public java.util.List<java.lang.String> getItem();
   }
 
-  public final class AudioDevice extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.AudioDevice valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.AudioDevice[] values();
+  public enum AudioDevice {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.AudioDevice AUDIO_DEVICE_IN_AMBIENT;
     enum_constant public static final audio.policy.configuration.V4_0.AudioDevice AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET;
     enum_constant public static final audio.policy.configuration.V4_0.AudioDevice AUDIO_DEVICE_IN_AUX_DIGITAL;
@@ -72,10 +71,8 @@
     enum_constant public static final audio.policy.configuration.V4_0.AudioDevice AUDIO_DEVICE_OUT_WIRED_HEADSET;
   }
 
-  public final class AudioFormat extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.AudioFormat valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.AudioFormat[] values();
+  public enum AudioFormat {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.AudioFormat AUDIO_FORMAT_AAC;
     enum_constant public static final audio.policy.configuration.V4_0.AudioFormat AUDIO_FORMAT_AAC_ADIF;
     enum_constant public static final audio.policy.configuration.V4_0.AudioFormat AUDIO_FORMAT_AAC_ADTS;
@@ -148,10 +145,8 @@
     method public void setVersion(audio.policy.configuration.V4_0.Version);
   }
 
-  public final class AudioUsage extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.AudioUsage valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.AudioUsage[] values();
+  public enum AudioUsage {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.AudioUsage AUDIO_USAGE_ALARM;
     enum_constant public static final audio.policy.configuration.V4_0.AudioUsage AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY;
     enum_constant public static final audio.policy.configuration.V4_0.AudioUsage AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE;
@@ -167,10 +162,8 @@
     enum_constant public static final audio.policy.configuration.V4_0.AudioUsage AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING;
   }
 
-  public final class DeviceCategory extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.DeviceCategory valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.DeviceCategory[] values();
+  public enum DeviceCategory {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.DeviceCategory DEVICE_CATEGORY_EARPIECE;
     enum_constant public static final audio.policy.configuration.V4_0.DeviceCategory DEVICE_CATEGORY_EXT_MEDIA;
     enum_constant public static final audio.policy.configuration.V4_0.DeviceCategory DEVICE_CATEGORY_HEADSET;
@@ -185,25 +178,23 @@
 
   public static class DevicePorts.DevicePort {
     ctor public DevicePorts.DevicePort();
-    method public java.lang.String getAddress();
+    method public String getAddress();
     method public audio.policy.configuration.V4_0.Gains getGains();
     method public java.util.List<audio.policy.configuration.V4_0.Profile> getProfile();
     method public audio.policy.configuration.V4_0.Role getRole();
-    method public java.lang.String getTagName();
-    method public java.lang.String getType();
+    method public String getTagName();
+    method public String getType();
     method public boolean get_default();
-    method public void setAddress(java.lang.String);
+    method public void setAddress(String);
     method public void setGains(audio.policy.configuration.V4_0.Gains);
     method public void setRole(audio.policy.configuration.V4_0.Role);
-    method public void setTagName(java.lang.String);
-    method public void setType(java.lang.String);
+    method public void setTagName(String);
+    method public void setType(String);
     method public void set_default(boolean);
   }
 
-  public final class GainMode extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.GainMode valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.GainMode[] values();
+  public enum GainMode {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.GainMode AUDIO_GAIN_MODE_CHANNELS;
     enum_constant public static final audio.policy.configuration.V4_0.GainMode AUDIO_GAIN_MODE_JOINT;
     enum_constant public static final audio.policy.configuration.V4_0.GainMode AUDIO_GAIN_MODE_RAMP;
@@ -216,23 +207,23 @@
 
   public static class Gains.Gain {
     ctor public Gains.Gain();
-    method public java.lang.String getChannel_mask();
+    method public String getChannel_mask();
     method public int getDefaultValueMB();
     method public int getMaxRampMs();
     method public int getMaxValueMB();
     method public int getMinRampMs();
     method public int getMinValueMB();
     method public audio.policy.configuration.V4_0.GainMode getMode();
-    method public java.lang.String getName();
+    method public String getName();
     method public int getStepValueMB();
-    method public void setChannel_mask(java.lang.String);
+    method public void setChannel_mask(String);
     method public void setDefaultValueMB(int);
     method public void setMaxRampMs(int);
     method public void setMaxValueMB(int);
     method public void setMinRampMs(int);
     method public void setMinValueMB(int);
     method public void setMode(audio.policy.configuration.V4_0.GainMode);
-    method public void setName(java.lang.String);
+    method public void setName(String);
     method public void setStepValueMB(int);
   }
 
@@ -242,10 +233,8 @@
     method public void setSpeaker_drc_enabled(boolean);
   }
 
-  public final class HalVersion extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.HalVersion valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.HalVersion[] values();
+  public enum HalVersion {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.HalVersion _2_0;
     enum_constant public static final audio.policy.configuration.V4_0.HalVersion _3_0;
   }
@@ -257,27 +246,25 @@
 
   public static class MixPorts.MixPort {
     ctor public MixPorts.MixPort();
-    method public java.lang.String getFlags();
+    method public String getFlags();
     method public audio.policy.configuration.V4_0.Gains getGains();
     method public long getMaxActiveCount();
     method public long getMaxOpenCount();
-    method public java.lang.String getName();
+    method public String getName();
     method public java.util.List<audio.policy.configuration.V4_0.AudioUsage> getPreferredUsage();
     method public java.util.List<audio.policy.configuration.V4_0.Profile> getProfile();
     method public audio.policy.configuration.V4_0.Role getRole();
-    method public void setFlags(java.lang.String);
+    method public void setFlags(String);
     method public void setGains(audio.policy.configuration.V4_0.Gains);
     method public void setMaxActiveCount(long);
     method public void setMaxOpenCount(long);
-    method public void setName(java.lang.String);
+    method public void setName(String);
     method public void setPreferredUsage(java.util.List<audio.policy.configuration.V4_0.AudioUsage>);
     method public void setRole(audio.policy.configuration.V4_0.Role);
   }
 
-  public final class MixType extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.MixType valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.MixType[] values();
+  public enum MixType {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.MixType mix;
     enum_constant public static final audio.policy.configuration.V4_0.MixType mux;
   }
@@ -290,44 +277,42 @@
   public static class Modules.Module {
     ctor public Modules.Module();
     method public audio.policy.configuration.V4_0.AttachedDevices getAttachedDevices();
-    method public java.lang.String getDefaultOutputDevice();
+    method public String getDefaultOutputDevice();
     method public audio.policy.configuration.V4_0.DevicePorts getDevicePorts();
     method public audio.policy.configuration.V4_0.HalVersion getHalVersion();
     method public audio.policy.configuration.V4_0.MixPorts getMixPorts();
-    method public java.lang.String getName();
+    method public String getName();
     method public audio.policy.configuration.V4_0.Routes getRoutes();
     method public void setAttachedDevices(audio.policy.configuration.V4_0.AttachedDevices);
-    method public void setDefaultOutputDevice(java.lang.String);
+    method public void setDefaultOutputDevice(String);
     method public void setDevicePorts(audio.policy.configuration.V4_0.DevicePorts);
     method public void setHalVersion(audio.policy.configuration.V4_0.HalVersion);
     method public void setMixPorts(audio.policy.configuration.V4_0.MixPorts);
-    method public void setName(java.lang.String);
+    method public void setName(String);
     method public void setRoutes(audio.policy.configuration.V4_0.Routes);
   }
 
   public class Profile {
     ctor public Profile();
-    method public java.lang.String getChannelMasks();
-    method public java.lang.String getFormat();
-    method public java.lang.String getName();
-    method public java.lang.String getSamplingRates();
-    method public void setChannelMasks(java.lang.String);
-    method public void setFormat(java.lang.String);
-    method public void setName(java.lang.String);
-    method public void setSamplingRates(java.lang.String);
+    method public String getChannelMasks();
+    method public String getFormat();
+    method public String getName();
+    method public String getSamplingRates();
+    method public void setChannelMasks(String);
+    method public void setFormat(String);
+    method public void setName(String);
+    method public void setSamplingRates(String);
   }
 
   public class Reference {
     ctor public Reference();
-    method public java.lang.String getName();
+    method public String getName();
     method public java.util.List<java.lang.String> getPoint();
-    method public void setName(java.lang.String);
+    method public void setName(String);
   }
 
-  public final class Role extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.Role valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.Role[] values();
+  public enum Role {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.Role sink;
     enum_constant public static final audio.policy.configuration.V4_0.Role source;
   }
@@ -339,18 +324,16 @@
 
   public static class Routes.Route {
     ctor public Routes.Route();
-    method public java.lang.String getSink();
-    method public java.lang.String getSources();
+    method public String getSink();
+    method public String getSources();
     method public audio.policy.configuration.V4_0.MixType getType();
-    method public void setSink(java.lang.String);
-    method public void setSources(java.lang.String);
+    method public void setSink(String);
+    method public void setSources(String);
     method public void setType(audio.policy.configuration.V4_0.MixType);
   }
 
-  public final class Stream extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.Stream valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.Stream[] values();
+  public enum Stream {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.Stream AUDIO_STREAM_ACCESSIBILITY;
     enum_constant public static final audio.policy.configuration.V4_0.Stream AUDIO_STREAM_ALARM;
     enum_constant public static final audio.policy.configuration.V4_0.Stream AUDIO_STREAM_BLUETOOTH_SCO;
@@ -366,10 +349,8 @@
     enum_constant public static final audio.policy.configuration.V4_0.Stream AUDIO_STREAM_VOICE_CALL;
   }
 
-  public final class Version extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V4_0.Version valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V4_0.Version[] values();
+  public enum Version {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V4_0.Version _1_0;
   }
 
@@ -377,10 +358,10 @@
     ctor public Volume();
     method public audio.policy.configuration.V4_0.DeviceCategory getDeviceCategory();
     method public java.util.List<java.lang.String> getPoint();
-    method public java.lang.String getRef();
+    method public String getRef();
     method public audio.policy.configuration.V4_0.Stream getStream();
     method public void setDeviceCategory(audio.policy.configuration.V4_0.DeviceCategory);
-    method public void setRef(java.lang.String);
+    method public void setRef(String);
     method public void setStream(audio.policy.configuration.V4_0.Stream);
   }
 
@@ -393,7 +374,7 @@
   public class XmlParser {
     ctor public XmlParser();
     method public static audio.policy.configuration.V4_0.AudioPolicyConfiguration read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static java.lang.String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
   }
 
diff --git a/audio/4.0/config/api/removed.txt b/audio/4.0/config/api/removed.txt
index e69de29..d802177 100644
--- a/audio/4.0/config/api/removed.txt
+++ b/audio/4.0/config/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/audio/5.0/config/api/current.txt b/audio/5.0/config/api/current.txt
index bceedcc..822237e 100644
--- a/audio/5.0/config/api/current.txt
+++ b/audio/5.0/config/api/current.txt
@@ -1,3 +1,4 @@
+// Signature format: 2.0
 package audio.policy.configuration.V5_0 {
 
   public class AttachedDevices {
@@ -5,10 +6,8 @@
     method public java.util.List<java.lang.String> getItem();
   }
 
-  public final class AudioDevice extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.AudioDevice valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.AudioDevice[] values();
+  public enum AudioDevice {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.AudioDevice AUDIO_DEVICE_IN_AMBIENT;
     enum_constant public static final audio.policy.configuration.V5_0.AudioDevice AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET;
     enum_constant public static final audio.policy.configuration.V5_0.AudioDevice AUDIO_DEVICE_IN_AUX_DIGITAL;
@@ -72,10 +71,8 @@
     enum_constant public static final audio.policy.configuration.V5_0.AudioDevice AUDIO_DEVICE_OUT_WIRED_HEADSET;
   }
 
-  public final class AudioFormat extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.AudioFormat valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.AudioFormat[] values();
+  public enum AudioFormat {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.AudioFormat AUDIO_FORMAT_AAC;
     enum_constant public static final audio.policy.configuration.V5_0.AudioFormat AUDIO_FORMAT_AAC_ADIF;
     enum_constant public static final audio.policy.configuration.V5_0.AudioFormat AUDIO_FORMAT_AAC_ADTS;
@@ -156,10 +153,8 @@
     method public void setVersion(audio.policy.configuration.V5_0.Version);
   }
 
-  public final class AudioUsage extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.AudioUsage valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.AudioUsage[] values();
+  public enum AudioUsage {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.AudioUsage AUDIO_USAGE_ALARM;
     enum_constant public static final audio.policy.configuration.V5_0.AudioUsage AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY;
     enum_constant public static final audio.policy.configuration.V5_0.AudioUsage AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE;
@@ -175,10 +170,8 @@
     enum_constant public static final audio.policy.configuration.V5_0.AudioUsage AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING;
   }
 
-  public final class DeviceCategory extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.DeviceCategory valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.DeviceCategory[] values();
+  public enum DeviceCategory {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.DeviceCategory DEVICE_CATEGORY_EARPIECE;
     enum_constant public static final audio.policy.configuration.V5_0.DeviceCategory DEVICE_CATEGORY_EXT_MEDIA;
     enum_constant public static final audio.policy.configuration.V5_0.DeviceCategory DEVICE_CATEGORY_HEADSET;
@@ -193,27 +186,25 @@
 
   public static class DevicePorts.DevicePort {
     ctor public DevicePorts.DevicePort();
-    method public java.lang.String getAddress();
+    method public String getAddress();
     method public java.util.List<audio.policy.configuration.V5_0.AudioFormat> getEncodedFormats();
     method public audio.policy.configuration.V5_0.Gains getGains();
     method public java.util.List<audio.policy.configuration.V5_0.Profile> getProfile();
     method public audio.policy.configuration.V5_0.Role getRole();
-    method public java.lang.String getTagName();
-    method public java.lang.String getType();
+    method public String getTagName();
+    method public String getType();
     method public boolean get_default();
-    method public void setAddress(java.lang.String);
+    method public void setAddress(String);
     method public void setEncodedFormats(java.util.List<audio.policy.configuration.V5_0.AudioFormat>);
     method public void setGains(audio.policy.configuration.V5_0.Gains);
     method public void setRole(audio.policy.configuration.V5_0.Role);
-    method public void setTagName(java.lang.String);
-    method public void setType(java.lang.String);
+    method public void setTagName(String);
+    method public void setType(String);
     method public void set_default(boolean);
   }
 
-  public final class GainMode extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.GainMode valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.GainMode[] values();
+  public enum GainMode {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.GainMode AUDIO_GAIN_MODE_CHANNELS;
     enum_constant public static final audio.policy.configuration.V5_0.GainMode AUDIO_GAIN_MODE_JOINT;
     enum_constant public static final audio.policy.configuration.V5_0.GainMode AUDIO_GAIN_MODE_RAMP;
@@ -226,23 +217,23 @@
 
   public static class Gains.Gain {
     ctor public Gains.Gain();
-    method public java.lang.String getChannel_mask();
+    method public String getChannel_mask();
     method public int getDefaultValueMB();
     method public int getMaxRampMs();
     method public int getMaxValueMB();
     method public int getMinRampMs();
     method public int getMinValueMB();
     method public audio.policy.configuration.V5_0.GainMode getMode();
-    method public java.lang.String getName();
+    method public String getName();
     method public int getStepValueMB();
-    method public void setChannel_mask(java.lang.String);
+    method public void setChannel_mask(String);
     method public void setDefaultValueMB(int);
     method public void setMaxRampMs(int);
     method public void setMaxValueMB(int);
     method public void setMinRampMs(int);
     method public void setMinValueMB(int);
     method public void setMode(audio.policy.configuration.V5_0.GainMode);
-    method public void setName(java.lang.String);
+    method public void setName(String);
     method public void setStepValueMB(int);
   }
 
@@ -252,10 +243,8 @@
     method public void setSpeaker_drc_enabled(boolean);
   }
 
-  public final class HalVersion extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.HalVersion valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.HalVersion[] values();
+  public enum HalVersion {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.HalVersion _2_0;
     enum_constant public static final audio.policy.configuration.V5_0.HalVersion _3_0;
   }
@@ -267,27 +256,25 @@
 
   public static class MixPorts.MixPort {
     ctor public MixPorts.MixPort();
-    method public java.lang.String getFlags();
+    method public String getFlags();
     method public audio.policy.configuration.V5_0.Gains getGains();
     method public long getMaxActiveCount();
     method public long getMaxOpenCount();
-    method public java.lang.String getName();
+    method public String getName();
     method public java.util.List<audio.policy.configuration.V5_0.AudioUsage> getPreferredUsage();
     method public java.util.List<audio.policy.configuration.V5_0.Profile> getProfile();
     method public audio.policy.configuration.V5_0.Role getRole();
-    method public void setFlags(java.lang.String);
+    method public void setFlags(String);
     method public void setGains(audio.policy.configuration.V5_0.Gains);
     method public void setMaxActiveCount(long);
     method public void setMaxOpenCount(long);
-    method public void setName(java.lang.String);
+    method public void setName(String);
     method public void setPreferredUsage(java.util.List<audio.policy.configuration.V5_0.AudioUsage>);
     method public void setRole(audio.policy.configuration.V5_0.Role);
   }
 
-  public final class MixType extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.MixType valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.MixType[] values();
+  public enum MixType {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.MixType mix;
     enum_constant public static final audio.policy.configuration.V5_0.MixType mux;
   }
@@ -300,44 +287,42 @@
   public static class Modules.Module {
     ctor public Modules.Module();
     method public audio.policy.configuration.V5_0.AttachedDevices getAttachedDevices();
-    method public java.lang.String getDefaultOutputDevice();
+    method public String getDefaultOutputDevice();
     method public audio.policy.configuration.V5_0.DevicePorts getDevicePorts();
     method public audio.policy.configuration.V5_0.HalVersion getHalVersion();
     method public audio.policy.configuration.V5_0.MixPorts getMixPorts();
-    method public java.lang.String getName();
+    method public String getName();
     method public audio.policy.configuration.V5_0.Routes getRoutes();
     method public void setAttachedDevices(audio.policy.configuration.V5_0.AttachedDevices);
-    method public void setDefaultOutputDevice(java.lang.String);
+    method public void setDefaultOutputDevice(String);
     method public void setDevicePorts(audio.policy.configuration.V5_0.DevicePorts);
     method public void setHalVersion(audio.policy.configuration.V5_0.HalVersion);
     method public void setMixPorts(audio.policy.configuration.V5_0.MixPorts);
-    method public void setName(java.lang.String);
+    method public void setName(String);
     method public void setRoutes(audio.policy.configuration.V5_0.Routes);
   }
 
   public class Profile {
     ctor public Profile();
-    method public java.lang.String getChannelMasks();
-    method public java.lang.String getFormat();
-    method public java.lang.String getName();
-    method public java.lang.String getSamplingRates();
-    method public void setChannelMasks(java.lang.String);
-    method public void setFormat(java.lang.String);
-    method public void setName(java.lang.String);
-    method public void setSamplingRates(java.lang.String);
+    method public String getChannelMasks();
+    method public String getFormat();
+    method public String getName();
+    method public String getSamplingRates();
+    method public void setChannelMasks(String);
+    method public void setFormat(String);
+    method public void setName(String);
+    method public void setSamplingRates(String);
   }
 
   public class Reference {
     ctor public Reference();
-    method public java.lang.String getName();
+    method public String getName();
     method public java.util.List<java.lang.String> getPoint();
-    method public void setName(java.lang.String);
+    method public void setName(String);
   }
 
-  public final class Role extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.Role valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.Role[] values();
+  public enum Role {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.Role sink;
     enum_constant public static final audio.policy.configuration.V5_0.Role source;
   }
@@ -349,18 +334,16 @@
 
   public static class Routes.Route {
     ctor public Routes.Route();
-    method public java.lang.String getSink();
-    method public java.lang.String getSources();
+    method public String getSink();
+    method public String getSources();
     method public audio.policy.configuration.V5_0.MixType getType();
-    method public void setSink(java.lang.String);
-    method public void setSources(java.lang.String);
+    method public void setSink(String);
+    method public void setSources(String);
     method public void setType(audio.policy.configuration.V5_0.MixType);
   }
 
-  public final class Stream extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.Stream valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.Stream[] values();
+  public enum Stream {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.Stream AUDIO_STREAM_ACCESSIBILITY;
     enum_constant public static final audio.policy.configuration.V5_0.Stream AUDIO_STREAM_ALARM;
     enum_constant public static final audio.policy.configuration.V5_0.Stream AUDIO_STREAM_BLUETOOTH_SCO;
@@ -395,10 +378,8 @@
     method public void setFormats(audio.policy.configuration.V5_0.SurroundFormats);
   }
 
-  public final class Version extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.policy.configuration.V5_0.Version valueOf(java.lang.String);
-    method public static final audio.policy.configuration.V5_0.Version[] values();
+  public enum Version {
+    method public String getRawName();
     enum_constant public static final audio.policy.configuration.V5_0.Version _1_0;
   }
 
@@ -406,10 +387,10 @@
     ctor public Volume();
     method public audio.policy.configuration.V5_0.DeviceCategory getDeviceCategory();
     method public java.util.List<java.lang.String> getPoint();
-    method public java.lang.String getRef();
+    method public String getRef();
     method public audio.policy.configuration.V5_0.Stream getStream();
     method public void setDeviceCategory(audio.policy.configuration.V5_0.DeviceCategory);
-    method public void setRef(java.lang.String);
+    method public void setRef(String);
     method public void setStream(audio.policy.configuration.V5_0.Stream);
   }
 
@@ -422,7 +403,7 @@
   public class XmlParser {
     ctor public XmlParser();
     method public static audio.policy.configuration.V5_0.AudioPolicyConfiguration read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static java.lang.String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
   }
 
diff --git a/audio/5.0/config/api/removed.txt b/audio/5.0/config/api/removed.txt
index e69de29..d802177 100644
--- a/audio/5.0/config/api/removed.txt
+++ b/audio/5.0/config/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/audio/effect/5.0/xml/api/current.txt b/audio/effect/5.0/xml/api/current.txt
index 294501d..4a7f88b 100644
--- a/audio/effect/5.0/xml/api/current.txt
+++ b/audio/effect/5.0/xml/api/current.txt
@@ -1,3 +1,4 @@
+// Signature format: 2.0
 package audio.effects.V5_0 {
 
   public class Audioeffectsconf {
@@ -26,10 +27,10 @@
 
   public class EffectImplType {
     ctor public EffectImplType();
-    method public java.lang.String getLibrary();
-    method public java.lang.String getUuid();
-    method public void setLibrary(java.lang.String);
-    method public void setUuid(java.lang.String);
+    method public String getLibrary();
+    method public String getUuid();
+    method public void setLibrary(String);
+    method public void setUuid(String);
   }
 
   public class EffectProxyType extends audio.effects.V5_0.EffectType {
@@ -42,8 +43,8 @@
 
   public class EffectType extends audio.effects.V5_0.EffectImplType {
     ctor public EffectType();
-    method public java.lang.String getName();
-    method public void setName(java.lang.String);
+    method public String getName();
+    method public void setName(String);
   }
 
   public class EffectsType {
@@ -59,16 +60,14 @@
 
   public static class LibrariesType.Library {
     ctor public LibrariesType.Library();
-    method public java.lang.String getName();
-    method public java.lang.String getPath();
-    method public void setName(java.lang.String);
-    method public void setPath(java.lang.String);
+    method public String getName();
+    method public String getPath();
+    method public void setName(String);
+    method public void setPath(String);
   }
 
-  public final class StreamInputType extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.effects.V5_0.StreamInputType valueOf(java.lang.String);
-    method public static final audio.effects.V5_0.StreamInputType[] values();
+  public enum StreamInputType {
+    method public String getRawName();
     enum_constant public static final audio.effects.V5_0.StreamInputType camcorder;
     enum_constant public static final audio.effects.V5_0.StreamInputType mic;
     enum_constant public static final audio.effects.V5_0.StreamInputType unprocessed;
@@ -79,10 +78,8 @@
     enum_constant public static final audio.effects.V5_0.StreamInputType voice_uplink;
   }
 
-  public final class StreamOutputType extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.effects.V5_0.StreamOutputType valueOf(java.lang.String);
-    method public static final audio.effects.V5_0.StreamOutputType[] values();
+  public enum StreamOutputType {
+    method public String getRawName();
     enum_constant public static final audio.effects.V5_0.StreamOutputType alarm;
     enum_constant public static final audio.effects.V5_0.StreamOutputType bluetooth_sco;
     enum_constant public static final audio.effects.V5_0.StreamOutputType dtmf;
@@ -114,21 +111,19 @@
 
   public static class StreamProcessingType.Apply {
     ctor public StreamProcessingType.Apply();
-    method public java.lang.String getEffect();
-    method public void setEffect(java.lang.String);
+    method public String getEffect();
+    method public void setEffect(String);
   }
 
-  public final class VersionType extends java.lang.Enum {
-    method public java.lang.String getRawName();
-    method public static audio.effects.V5_0.VersionType valueOf(java.lang.String);
-    method public static final audio.effects.V5_0.VersionType[] values();
+  public enum VersionType {
+    method public String getRawName();
     enum_constant public static final audio.effects.V5_0.VersionType _2_0;
   }
 
   public class XmlParser {
     ctor public XmlParser();
     method public static audio.effects.V5_0.Audioeffectsconf read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public static java.lang.String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
   }
 
diff --git a/audio/effect/5.0/xml/api/removed.txt b/audio/effect/5.0/xml/api/removed.txt
index e69de29..d802177 100644
--- a/audio/effect/5.0/xml/api/removed.txt
+++ b/audio/effect/5.0/xml/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
