Extending Enumerations (fun with Enum<enum> and Attributes)

Enums are just great, but not very user friendly once you get past simple one word names. In this article I will show you how to make them far more usable via Attributes. We will be able to give them a user friendly name, parse strings to enum based on the enum’s value, member description, and user friendly description, and created orders lists and dictionaries.

public enum enRates
{
  Main = 0, //Hourly
  OffSiteFullDay = 22, //Off Site Full Day
  OnSiteFullDay = 21, //On Site Full Day
  OffSite = 202, //Off Site Hourly
  OnSite = 201, //On Site Hourly
}

Notice how the values are not orders the way I want them and the names don’t match the user descriptions.

Now lets see what we can do by extending them through attributes:

public enum enRates
{
  [EnumInformation("Hourly", true, 1)] Main = 0,
  [EnumInformation("Off Site Full Day", true, 4)] OffSiteFullDay = 22,
  [EnumInformation("On Site Full Day", true, 5)] OnSiteFullDay = 21,
  [EnumInformation("Off Site Hourly", true, 2)] OffSite = 202,
  [EnumInformation("On Site Hourly", true, 3)] OnSite = 201,
}

Now lets see what we can do with these attributes

a. Get a user friendly description for an enum

Console.WriteLine("Enum<enRates>.Description(enRates.Main) = {0}", Enum<enRates>.Description(enRates.Main));

gets:

Enum<enRates>.Description(enRates.Main) = Hourly

b. Parse values to get enum

Console.WriteLine("Enum<enRates>.Parse(\"Main\", enRates.OnSiteFullDay) = {0}", Enum<enRates>.Parse("Main", enRates.OnSiteFullDay));
Console.WriteLine("Enum<enRates>.Parse(\"Hourly\", enRates.OnSiteFullDay) = {0}", Enum<enRates>.Parse("Hourly", enRates.OnSiteFullDay));
Console.WriteLine("Enum<enRates>.Parse(\"0\", enRates.OnSiteFullDay) = {0}", Enum<enRates>.Parse("0", enRates.OnSiteFullDay));
Console.WriteLine("Enum<enRates>.Parse(\"On Site Full Day\", enRates.OnSiteFullDay) = {0}", Enum<enRates>.Parse("On Site Full Day", enRates.OnSiteFullDay));
Console.WriteLine("Enum<enRates>.Parse(\"OnSiteFullDay\", enRates.OnSiteFullDay) = {0}", Enum<enRates>.Parse("OnSiteFullDay", enRates.OnSiteFullDay));
Console.WriteLine("Enum<enRates>.Parse(\"UnKnown\", enRates.OnSiteFullDay) = {0}", Enum<enRates>.Parse("UnKnown", enRates.OnSiteFullDay));

gets:

Enum.Parse("Main", enRates.OnSiteFullDay) = Main
Enum.Parse("Hourly", enRates.OnSiteFullDay) = Main
Enum.Parse("0", enRates.OnSiteFullDay) = Main
Enum.Parse("On Site Full Day", enRates.OnSiteFullDay) = OnSiteFullDay
Enum.Parse("OnSiteFullDay", enRates.OnSiteFullDay) = OnSiteFullDay
Enum.Parse("UnKnown", enRates.OnSiteFullDay) = OnSiteFullDay

c. Get an ordered list for an enum (notice the order its ordered by the third value in the attribute, not the value of the member)

Console.WriteLine("ToList:");
List<enRates> list = Enum<enRates>.ToList();
foreach (enRates rate in list)
{
  Console.WriteLine("  {0}", rate);
}

gets:

ToList:
  Main
  OffSite
  OnSite
  OffSiteFullDay
  OnSiteFullDay

d. Get an ordered user friendly list of descriptions for an enum

Console.WriteLine("ToStringList:");
List<string> stringList = Enum<enRates>.ToStringList();
foreach (string rate in stringList)
{
  Console.WriteLine("  {0}", rate);
}

gets:

ToStringList:
  Hourly
  Off Site Hourly
  On Site Hourly
  Off Site Full Day
  On Site Full Day

e. Get an ordered user friendly dictionary with the member string value and user friendly value

Dictionary<string, string> stringDictionary = Enum<enRates>.ToStringDictionary();
foreach (KeyValuePair<string, string> rate in stringDictionary)
{
  Console.WriteLine("  {0} = {1}", rate.Key, rate.Value);
}

gets:

ToStringDictionary:
  Main = Hourly
  OffSite = Off Site Hourly
  OnSite = On Site Hourly
  OffSiteFullDay = Off Site Full Day
  OnSiteFullDay = On Site Full Day

f. Get an ordered user friendly dictionary with the int value of the member and user friendly value

Dictionary<int, string> dictionary = Enum<enRates>.ToDictionary();
foreach (KeyValuePair<int, string> rate in dictionary)
{
  Console.WriteLine("  {0} = {1}", rate.Key, rate.Value);
}

gets:

ToDictionary:
  0 = Hourly
  202 = Off Site Hourly
  201 = On Site Hourly
  22 = Off Site Full Day
  21 = On Site Full Day

g. Get an ordered user friendly dictionary with the member and user friendly value

Dictionary<enRates, string> valueDictionary = Enum<enRates>.ToValueDictionary();
foreach (KeyValuePair<enRates, string> rate in valueDictionary)
{
  Console.WriteLine("  {0} = {1}", rate.Key, rate.Value);
}

gets:

ToValueDictionary:
  Main = Hourly
  OffSite = Off Site Hourly
  OnSite = On Site Hourly
  OffSiteFullDay = Off Site Full Day
  OnSiteFullDay = On Site Full Day

Here’s the source code:

[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
public class EnumInformationAttribute : Attribute
{
  public string Description { get; internal set; }
  public bool Active { get; internal set; }
  public int? Order { get; internal set; }

  public EnumInformationAttribute(string description, bool active, int? order)
  {
    Description = description;
    Active = active;
    Order = order;
  }

  public EnumInformationAttribute(string description, bool active, int order) : this(description, active, (int?)order) { }

  public EnumInformationAttribute(string description, bool active) : this(description, active, null) { }

  public EnumInformationAttribute(string description) : this(description, true, null) { }
}

public class EnumParseException : Exception
{
  public EnumParseException() : base() { }
  public EnumParseException(string message) : base(message) { }
  public EnumParseException(string message, Exception innerException) : base(message, innerException) { }
}

public static class Enum<T>
{
  #region EnumInformation
  public class EnumInformation
  {
    public T Value { get; internal set; }
    public string DefaultDescription { get; internal set; }
    public string WithSpaces { get; internal set; }
    public bool Active { get; internal set; }
    public int Order { get; internal set; }

    internal EnumInformation(T value, string defaultDescription, string withSpaces, bool active, int order)
    {
      Value = value;
      DefaultDescription = defaultDescription;
      WithSpaces = withSpaces;
      Active = active;
      Order = order;
    }

    internal EnumInformation(T value) : this(value, value.ToString(), RemoveTitleCase(value.ToString()), true, Convert.ToInt32(value)) { }
  }
  #endregion

  #region Static Constructor
  internal static List<EnumInformation> _List = null;
  internal static Dictionary<T, EnumInformation> _Descriptions = null;
  internal static Dictionary<string, T> _LookupValues = null;

  static Enum()
  {
    string key;
    Type type = typeof(T);
    EnumInformationAttribute[] enumInformationAttributes = null;

    EnumInformation enumInformation = null;

    _List = new List<EnumInformation>();
    _Descriptions = new Dictionary<T, EnumInformation>();
    _LookupValues = new Dictionary<string, T>();

    if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) type = (new System.ComponentModel.NullableConverter(type)).UnderlyingType;

    if (!(type.IsEnum)) throw new Exception("Cannot create Enum<T> when T is not a Enum");

    foreach (T value in Enum.GetValues(type))
    {
      enumInformation = new EnumInformation(value);
      enumInformationAttributes = (EnumInformationAttribute[])(type.GetField(value.ToString()).GetCustomAttributes(typeof(EnumInformationAttribute), false));

      if (enumInformationAttributes.Length > 0)
      {
        enumInformation.DefaultDescription = enumInformationAttributes[0].Description;
        enumInformation.WithSpaces = enumInformationAttributes[0].Description;
        enumInformation.Active = enumInformationAttributes[0].Active;
        enumInformation.Order = enumInformationAttributes[0].Order ?? enumInformation.Order;
      }

      _List.Add(enumInformation);
      _Descriptions.Add(value, enumInformation);

      key = Convert.ToInt32(value).ToString().ToLower(); if (!_LookupValues.ContainsKey(key)) _LookupValues.Add(key, value);
      key = enumInformation.Value.ToString().ToLower(); if (!_LookupValues.ContainsKey(key)) _LookupValues.Add(key, value);
      key = enumInformation.DefaultDescription.ToLower(); if (!_LookupValues.ContainsKey(key)) _LookupValues.Add(key, value);
      key = enumInformation.WithSpaces.ToLower(); if (!_LookupValues.ContainsKey(key)) _LookupValues.Add(key, value);
    }

    _List.Sort((x, y) => x.Order.CompareTo(y.Order));
  }
  #endregion

  #region RemoveTitleCase
  private static string RemoveTitleCase(string value)
  {
    string result = value;

    result = System.Text.RegularExpressions.Regex.Replace(result, @"(?<begin>(\w*?))(?<end>[A-Z]+)", string.Format(@"${{begin}}{0}${{end}}", " ")).Trim();

    return result;
  }
  #endregion

  #region Description
  public static string Description(T value)
  {
    return Description(value, true);
  }
  public static string Description(T value, bool addSpaceBetweenWords)
  {
    string result = string.Empty;

    if (_Descriptions.ContainsKey(value)) result = (addSpaceBetweenWords ? _Descriptions[value].WithSpaces : _Descriptions[value].DefaultDescription);

    return result;
  }
  #endregion

  #region Count
  public static int Count()
  {
    return _Descriptions.Count;
  }
  #endregion

  #region Parse
  public static T Parse(string value)
  {
    T result;

    value = (value ?? string.Empty).ToLower();

    if (_LookupValues.ContainsKey(value))
    {
      result = _LookupValues[value];
    }
    else
    {
      throw new EnumParseException(string.Format("No Match for \"{0}\" in \"{1}\"", value, typeof(T).Name));
    }

    return result;
  }

  public static T Parse(string value, T defaultValue)
  {
    T result;

    value = (value ?? string.Empty).ToLower();

    if (_LookupValues.ContainsKey(value))
      result = _LookupValues[value];
    else
      result = defaultValue;

    return result;
  }

  public static bool TryParse(string value, out T parsedValue)
  {
    bool result = false;

    value = (value ?? string.Empty).ToLower();

    if (_LookupValues.ContainsKey(value))
    {
      parsedValue = _LookupValues[value];
      result = true;
    }
    else
    {
      parsedValue = default(T);
    }

    return result;
  }
  #endregion

  #region ToList
  public static List<T> ToList()
  {
    return ToList(false);
  }

  public static List<T> ToList(bool activeOnly)
  {
    List<T> result = new List<T>();

    foreach (EnumInformation enumInformation in _List)
    {
      if (!activeOnly || enumInformation.Active) result.Add(enumInformation.Value);
    }

    return result;
  }
  #endregion

  #region ToStringList
  public static List<string> ToStringList()
  {
    return ToStringList(true);
  }

  public static List<string> ToStringList(bool addSpaceBetweenWords)
  {
    return ToStringList(addSpaceBetweenWords, false);
  }

  public static List<string> ToStringList(bool addSpaceBetweenWords, bool activeOnly)
  {
    List<string> result = new List<string>();

    foreach (EnumInformation enumInformation in _List)
    {
      if (!activeOnly || enumInformation.Active) result.Add((addSpaceBetweenWords ? enumInformation.WithSpaces : enumInformation.DefaultDescription));
    }

    return result;
  }
  #endregion

  #region ToStringDictionary
  public static Dictionary<string, string> ToStringDictionary()
  {
    return ToStringDictionary(true);
  }

  public static Dictionary<string, string> ToStringDictionary(bool addSpaceBetweenWords)
  {
    return ToStringDictionary(addSpaceBetweenWords, false);
  }

  public static Dictionary<string, string> ToStringDictionary(bool addSpaceBetweenWords, bool useDescriptionAsKey)
  {
    return ToStringDictionary(addSpaceBetweenWords, useDescriptionAsKey, false);
  }

  public static Dictionary<string, string> ToStringDictionary(bool addSpaceBetweenWords, bool useDescriptionAsKey, bool activeOnly)
  {
    Dictionary<string, string> result = new Dictionary<string, string>();

    foreach (EnumInformation enumInformation in _List)
    {
      string description = (addSpaceBetweenWords ? enumInformation.WithSpaces : enumInformation.DefaultDescription);
      string key = (useDescriptionAsKey ? description : enumInformation.Value.ToString());

      if (!activeOnly || enumInformation.Active) result.Add(key, description);
    }

    return result;
  }
  #endregion

  #region ToDictionary
  public static Dictionary<int, string> ToDictionary()
  {
    return ToDictionary(true);
  }

  public static Dictionary<int, string> ToDictionary(bool addSpaceBetweenWords)
  {
    return ToDictionary(addSpaceBetweenWords, false);
  }

  public static Dictionary<int, string> ToDictionary(bool addSpaceBetweenWords, bool activeOnly)
  {
    Dictionary<int, string> result = new Dictionary<int, string>();

    foreach (EnumInformation enumInformation in _List)
    {
      if (!activeOnly || enumInformation.Active) result.Add(Convert.ToInt32(enumInformation.Value), (addSpaceBetweenWords ? enumInformation.WithSpaces : enumInformation.DefaultDescription));
    }

    return result;
  }
  #endregion

  #region ToValueDictionary
  public static Dictionary<T, string> ToValueDictionary()
  {
    return ToValueDictionary(true);
  }

  public static Dictionary<T, string> ToValueDictionary(bool addSpaceBetweenWords)
  {
    return ToValueDictionary(addSpaceBetweenWords, false);
  }

  public static Dictionary<T, string> ToValueDictionary(bool addSpaceBetweenWords, bool activeOnly)
  {
    Dictionary<T, string> result = new Dictionary<T, string>();

    foreach (EnumInformation enumInformation in _List)
    {
      if (!activeOnly || enumInformation.Active) result.Add(enumInformation.Value, (addSpaceBetweenWords ? enumInformation.WithSpaces : enumInformation.DefaultDescription));
    }

    return result;
  }
  #endregion
}
Published 10/22/2009 21:35:15 (UTC) by Ron Muth

kick it on DotNetKicks.com  Shout it  vote it on WebDevVote.com

Comments

DotNetBurner - C# Extending Enumerations (fun with Enum and Attributes)

10/22/2009 21:48:09 by DotNetBurner - C#
DotNetBurner - burning hot .NET content

DotNetShoutout Extending Enumerations (fun with Enum and Attributes)

10/23/2009 09:47:28 by DotNetShoutout
Thank you for submitting this cool story - Trackback from DotNetShoutout

Servefault.com Extending Enumerations (fun with Enum and Attributes)

11/10/2009 20:00:39 by Servefault.com
Thank you for submitting this cool story - Trackback from Servefault.com

eti  re: Extending Enumerations (fun with Enum<enum> and Attributes)
10/25/2009 09:02:47 by eti
Hi there, (it's Sunday and i'm just starting to drink my coffee so i might be wrong on the next remarks) First, to be consistent with the rest of the framework, the Parse method should throw if it's unable to parse the value and TryParse should be the no-throw version. Second, you might consider adding something to convert (safely) to and from the integer value. I've always needed this when persisting to database. Anyway thanks for the nice article and the idea of applying attributes to enums. PS: posting first time with js disabled resulted in an error page

eti  re: Extending Enumerations (fun with Enum<enum> and Attributes)
10/25/2009 09:05:08 by eti
Followup: since the default title for a comment is "re: Extending Enumerations (fun with Enum [ enum ] and Attributes)" the enum paramenter is seen as a possible tag injection by the page validation in asp and posting the comment results in an error page. You might consider changing the default title on the comments...

Ron Muth  re: Extending Enumerations (fun with Enum<enum> and Attributes)
10/26/2009 05:44:53 by Ron Muth
eti, thank you for the remarks, I have fixed the page validation on the blog, and I agree with you on the Parse, I've updated the post

Khaja Minhajuddin  re: Extending Enumerations (fun with Enum<enum> and Attributes)
10/27/2009 03:44:17 by Khaja Minhajuddin
Really interesting post, I am gonna use this in my next project. I've always had issues with the not being to attach more info to an Enum. Thank you!

Alessandro Cavalieri  re: Extending Enumerations (fun with Enum<enum> and Attributes)
10/28/2009 17:39:53 by Alessandro Cavalieri
I did someting like this but less complete. Your example is more extended. Thanks.

Uibfpw  Darmowe delicate erotyczne
10/12/2011 20:12:38 by Uibfpw
Back in on a trip prime, [URL=http://xbanners.biz/m-3999/Darmowe-cycki]Darmowe cycki[/URL] you unquestionably had rules for how far you'd take off: under the shirt, over the pants, and so on. Well, the teenage you was on to something. "It can be pleasurable torture to participate in with each other greater than your underwear, teasing and stroking under the aegis the stuff," says mating bus Patti Britton, Ph.D. "You're structure up the presentiment, so when you finally do have skin-on-skin contact, it'll be that much more chancy and exciting.". When it comes to performing vocal sex on him, don't well- only on porn star-style suction. You can do a lot with good your utterance, I learned at Babeland's "Articulated Screwing Basics: Fellatio" (Babeland's most predominating rank!). Flatten your faux pas and play you are licking a enjoyable ice cream cone. Then try the "pointy-tongue" technic to motion up and down and side to side. Do various strokes and touches, like flicking your tongue finished the chairwoman, and accompany what friendly of rejoinder you get. By clicking the Put down button and accessing this 100% Free Porn PLACE, you tally to the following: I, the undersigned, below penalties of bearing false witness solemnly declare and affirm as follows: I am an adult, being at least 18 years of age. I am not accessing this self-governed lovemaking porn important to avail against the neighbourhood big wheel [URL=http://xbanners.biz/] filmy pornograficzne[/URL] or any myself whomsoever in any conceivable manner. I will not redistribute this uninhabited sexual congress porn stuff to anyone nor settle upon I permit any schoolgirl to seethis freed intimacy porn material, or any other mortal physically who capacity find such free fucking materialpersonally offensive. I subscribe to the principles of the First Amendment which holds thatfree matured Americans have planned the fre right to adjudicate for the benefit of themselves what they inclination look over andview without governmental interference. I swear by that such let go sex material does notoffend the flag of the community in which I exist, nor is unauthorized to view in the communityor locality in which I reside. I understand that DrBizzaro.com does not own or support anyof the sites he has linked to, nor do they identify who does. I will not carry DrBizzaro.comor any of it's owners decision-making representing any facts I view, be familiar with, access or download.It is my choice to access and/or download any of this empty information. All files are forevaluation purpose only. I be aware of that it is NOT illegal to interdependence couple to these pages. If you disagree, you requisite to bugger off at this very moment! By means of clicking flight below or in back of surreptitiously on your browser!

CarrollRandall  Jerald Mitchell
10/15/2011 04:32:21 by CarrollRandall
[url=http://www.hamstoo.com/Art/412202/93/Transform-Into-the-Most-Widespread-Celebration-Thrower-with-a-New-Propane-Fire-Bowl.html]Scottie Chuck[/url] [url=http://www.hotarticlesonline.com/2011/06/some-helpful-suggestions-for-your-brand-new-copper-fire-bowl/]Ahmad Vincenzo[/url] [url=http://www.idoarticles.com/grow-to-be-the-most-common-occasion-hostess-with-a-new-gas-fireplace-pit/]Jacob Tamela[/url] [url=http://www.iinformyou.com/Art/409121/93/Hold-Fantastic-Parties-with-Your-New-Propane-Fire-Bowl.html]Tommie Laverne[/url] [url=http://www.inclinenetwork.com/transform-into-the-most-widespread-party-thrower-with-a-new-propane-fire-bowl.aspx]Ernest Lia[/url] [url=http://www.isubmitnow.com/home-family/gas-fire-bowl-directions-and-best-practises.html]Spencer Alexis[/url] [url=http://www.iweberarticles.com/gardening/propane-fire-bowls-perfect-for-parties/]Amal Denny[/url] [url=http://www.look4articles.com/Art/213486/93/Do-You-Know-Sufficient-Facts-concerning-Fuel-Fireplace-Bowls-to-Purchase-One.html]Valentin Andrew[/url] [url=http://www.malaysiapos.com/articles/Art/150593/260/Always-Perform-Careful-Issues-Before-Buying-a-Fuel-Hearth-Bowl.html]Antione Myrta[/url] [url=http://www.maxref.com/a-couple-useful-suggestions-for-your-brand-new-gas-fire-pit]Jerri Shakira[/url] [url=http://www.maxref.com/archives/43505]Melvin Shakira[/url] [url=http://www.my-articles-online.com/index.php?page=article&article_id=182038]Marg Natalia[/url] [url=http://www.netarticledirectory.com/Art/95843/93/Hold-Great-Parties-with-Your-New-Propane-Fire-Pit.html]Rina Cliff[/url] [url=http://www.nichearticleslive.com/Art/233540/260/Gas-Fireplace-Bowl-Directions-and-Recommendations.html]Lael Timmy[/url] [url=http://www.noarticle.com/Art/7490/93/Will-Your-Friends-Deal-with-Your-Copper-Fire-Bowl-with-Respect.html]Ona Kirk[/url] [url=http://www.o4d.com/index.php?page=article&article_id=154837]Mafalda Leland[/url] [url=http://www.phenomenalarticles.com/Art/223182/485/Transform-Into-the-Most-Widespread-Party-Thrower-with-a-New-Propane-Fire-Bowl.html]Manie Arnita[/url] [url=http://www.press-wire.org/business/gas-fire-bowl-directions-and-recommendations/]Rina Chuck[/url] [url=http://www.profitbyarticle.com/home-improvement-articles/yard-equipment-articles/will-your-associates-treat-your-propane-fire-bowl-with-respect/]Kallie Ezra[/url] [url=http://www.rank08.de/2011/06/23/could-your-buddies-treat-your-propane-fire-bowl-with-respect/]Ona Elvis[/url] [url=http://www.scooparticle.com/Art/178943/93/A-Couple-Useful-Suggestions-for-Your-Brand-New-Gas-Fire-Pit.html]Otilia Floyd[/url] [url=http://www.swim-articles.com/Art/52048/24/Transform-Into-the-Most-Widespread-Party-Thrower-with-a-New-Propane-Fire-Bowl.html]Chase Tim[/url] [url=http://www.technicalcanyon.com/hold-great-parties-with-your-new-propane-fire-pit.aspx]Chiquita Nichelle[/url] [url=http://www.theauthorplace.com/Art/204129/226/Propane-Fireplace-Pits:-Good-for-Events.html]Tristan Laverne[/url] [url=http://www.tipbus.com/Article/Are-You-Contemplating-Buying-a-Gas-Fire-Bowl-/172305]Antone Arnita[/url] [url=http://www.travelarticledirectory.com/Art/110068/268/Do-You-Know-Enough-concerning-Gasoline-Fireplace-Bowls-to-Purchase-One.html]Mirna Arnita[/url] [url=http://www.uniquearticles.info/Art/235445/93/Always-Perform-Careful-Issues-Before-Buying-a-Fuel-Fireplace-Bowl.html]Alverta Tamela[/url] [url=http://www.whol.org/are-you-aware-of-sufficient-facts-concerning-gasoline-fireplace-pits-to-purchase-one.html]Spencer Rico[/url] [url=http://www.wordsdepot.com/Article/Gas-Fire-Pit-Directions-and-Recommendations/270347]Nancey Shaun[/url] [url=http://www.worldportal.us/will-your-friends-deal-with-your-copper-fire-bowl-with-respect/]Courtney Alva[/url] [url=http://www.yourarticlesource.com/Art/439378/93/Ways-to-Have-the-Good-Out-of-doors-Party.html]Corey Tony[/url] [url=http://www.zziin.info/edit-home/edit-gardening/gas-fire-pit-directions-and-recommendations.html]Shonda Lorinda[/url] [url=http://your.internetbusinessopportunity-1.com/2011/06/24/how-to-hold-the-perfect-outside-gathering/]Leroy Sylvia[/url] [url=http://yourpluggedin.com/fyifiles.com/Art/284987/9/Propane-Fire-Bowls-Are-The-Perfect-Supplement-to-Every-Backyard-Celebration.html]Ursula Kurtis[/url]

LRcharissa  amateur strippers amateur strippers video
10/18/2011 23:56:54 by LRcharissa
[url=http://www.crew116.com/link/541.html ][img]http://www.livelifenowww.com/img/8802.gif [/img][/url] [url=http://www.sexymoviemania.com/content/3/]amateur streaming tube[/url] amateur streaming video [i]amateur streaming videos[/i] amateur streaming vids [b]amateur streaming xxx[/b] amateur streams [i]amateur street[/i] amateur street porn [b]amateur striaght[/b] Cassy turned along with looked at them, a quizzical glimpse on her deal with. "What's going on, Jonathan? Precisely what is this all about?" In [b]amateur striaght guys[/b]. Hot shemales fucking girls and getting fucked by instantly guys within the tranny motion pictures. However this was Evening of romance. her Master certainly won't hurt the girl's, not on this unique night. "So you just want to make use of a condom so you are rarely getting pregnant right?" "I'm taking a shower. Are available wash me." Seriously, will still be watching dull anal movies. Of [b]amateur stright[/b]. Miriam raised the woman head with pride and returned the woman's stare: ???You can??™t do this so that you can us! People can??™t! You fucking bastards!??? Look at erotic girl humiliation from its greatest. [url=http://www.gianttoybox.com/link/812.html ][img]http://www.crew116.com/img/4104.gif [/img][/url] [url=http://www.tweetapix.com/content/3/]amateur stright guys[/url] [i]amateur string bikini[/i] amateur strip amateur strip cam [b]amateur strip clips[/b] amateur strip club [i]amateur strip clubs[/i] amateur strip contest [b]amateur strip contest video[/b] She sat back heels plus looked up during him. Some sort of whimper escaped your ex throat. 12 inches fetish porn site with hyperlinks to cost-free foot fetish pictures and videos allways fresh photos and videos. At [b]amateur strip contests[/b]. You will find a great deal of free porn samples using big behind girls with ever one porn small sample. See this sexy toddler having sex using guys and females on this innovative porn site. "I just dont want to be made fun of for obtaining the craddle." He said. Spanking tgp gives thumbnail links for you to free spanking video museums and galleries and paddling picture galleries. "Yeah Deborah, give some of us a chance.In Came reviews from the alternative Doms in the audience. Is [b]amateur strip dance[/b]. Author's Please note: Any individuals engaging in any sexual activity have a least eighteen years of age. The look on her behalf face signifies that she is aware but she'd like to hear them from you. The most insane hardcore photos and video clips youll observe on the web. [url=http://www.livelifenowww.com/link/989.html ][img]http://www.abhifoods.com/img/2282.gif [/img][/url] [url=http://www.tweetipix.com/content/3/]amateur strip dancing[/url] amateur strip movies [i]amateur strip naked[/i] amateur strip night [b]amateur strip off[/b] amateur strip pics [i]amateur strip poker[/i] amateur strip poker pics [b]amateur strip poker pictures[/b] And so i gather precisely the hottest plus post these here in my small porn web page. "Yes,Inches I agreed upon in a small, defeated voice. On [b]amateur strip poker video[/b]. She did start to seek out me under the table, but I rerouted her. Possibly there is more to come? Reddish colored was start to understand the riches, and the societal obsession, which had enabled this kind of to be completed. "Oh yes,In . she sighed in answer. Incredibly more to put versus eachother of my head. I failed. My personal work encountered. This was found. The [b]amateur strip poker videos[/b]. "Oh my Our god! Franklyn! Don't quit! Don't ever quit!" Girls simply just dont know really should stop. At milfthing each of our hot develop fully women are generally featured within the highest quality 100% unique and exclusive milf videos. [url=http://www.sexymoviemania.com/link/528.html ][img]http://www.abhifoods.com/img/1141.gif [/img][/url] [url=http://www.usedcomputerbuy.com/content/3/]amateur strip porn[/url] amateur strip show [i]amateur strip shows[/i] amateur strip tease [b]amateur strip tease video[/b] amateur strip tease videos [i]amateur strip teases[/i] amateur strip tube [b]amateur strip vid[/b] 'Where do you want the idea? Say the sluttish thoughts, Baby!Wi "Closest way to a new girl's heart is through her nipples, Which i say." No [b]amateur strip video[/b]. "Turn about, I want to notice all of that delicious body involving yours." "I failed to hear you. You'll have to be more responsible than in which." He or she stood together with his arms intersected. The guy stepped nearer and said," Drastically wrong answer." Thats what we enjoy travelling to. Adult baby in addition to diaper devotees phonesex porn web page. Are [b]amateur strip videos[/b]. Are the first to savor the unique pix and video tutorials straight from naked honeymoon beaches. Sexual teenage sluts work their snug pussies against their big playthings and dive their pockets deep. She stepped back gingerly, in addition to felt any bed powering her. The woman sat straight down, hands in her own lap. [url=http://www.wildwebtech.com/link/529.html ][img]http://www.livelifenowww.com/img/8468.gif [/img][/url] [url=http://www.verythotstory.com/content/3/]amateur strip vids[/url] amateur strip webcam [i]amateur striper[/i] amateur stripers [b]amateur striping[/b] amateur stripper [i]amateur stripper contest[/i] amateur stripper night [b]amateur stripper pics[/b] My spouse and i smile and have "Are sure regarding 'anything'?" I'd comfortable her up with a little cunt-lapping, and then a little more. Take [b]amateur stripper video[/b]. "I'm yours... ohh... most yours so that you can... ohhhh God!! I'm yours in order to command, mister!" ???May I clear my Master????... He ended dressing a great instant. However knew. He / she hesitated. "Eat it and never gag.In . Gobbling it up. "Miles, don't do this kind of to me!" By [b]amateur stripper videos[/b]. "Yeah I can feel it," was the sole reply I possibly could muster. ???Tell me, chyiara,??? he said softly. "Oh certainly. Come personally! Come for me!"

VadeTampmeelo  cialis Bmmhfs
11/03/2011 05:22:36 by VadeTampmeelo
dysfonction erectile impuissance, cialis France soigner impuissance dysfonction erectile. photo dysfonction erectile contre impuissance dysfonction erectile, cialis 20 mg traitements de l impuissance dysfonction erectile. les problemes d erection dysfonction erectile [url=http://www.cialisacheter.sitew.com]cialis 20 mg[/url] beta bloquant et impuissance hypertension arterielle. levitra 10 dysfonction erectile, cialis 40mg amlor et impuissance hypertension arterielle. levitra 10 dysfonction erectile.

Ideadsbem  Visit www.casino free games directory now
11/04/2011 10:21:01 by Ideadsbem
See it here: [b][url=http://casinoval.com/casino-games/]up bonus online casino[/url][/b]

adveteCar  routine
11/15/2011 08:14:19 by adveteCar
[url=http://www.onlinecasinorussian.com]casino[/url] [url=http://casinolasvegass.com]casino[/url] [url=http://www.playatonlinecasinos.com]online casino[/url] [url=http://www.casinoonlinebrazil.com]cassino[/url] [url=http://www.onlinecasino3.nl]casinos online[/url] [url=http://www.playatonlinecasinos.com/casino-games.html]pokies[/url]

sansagUpdaria  Download The Shrek Forever After Movie
11/16/2011 18:26:25 by sansagUpdaria
Sleeping Beauty Film Website Sleeping Beauty Movie Good Quality watch full version of the Sleeping Beauty Sleeping Beauty website [url=http://forum.arenaig.ig.com.br/z/upload/showthread.php?188635-download-divx-Sleeping-Beauty]watch Sleeping Beauty full film high quality [/url]Sleeping Beauty movie in high quality Watch The Whole Sleeping Beauty Movie Sleeping Beauty 2010 full film film Sleeping Beauty Touchback Dvds Touchback The Whole Film To Watch Touchback film high [url=http://forum.arenaig.ig.com.br/z/upload/showthread.php?188637-the-full-film-of-Touchback]Buy Movie Touchback Pda [/url]download divx Touchback Touchback 2010 full film Touchback the movie to watch

Pharmk498  Good info
12/20/2011 15:56:09 by Pharmk498
Hello! bkkeeea interesting bkkeeea site! I'm really like it! Very, very bkkeeea good!

Pharmd29  Good info
12/20/2011 15:57:13 by Pharmd29
Very nice site! [url=http://apxoiey.com/qoarqt/2.html]cheap cialis[/url]

Pharma746  Good info
12/20/2011 15:58:49 by Pharma746
Very nice site! cheap cialis http://apxoiey.com/qoarqt/4.html

Pharmd211  Good info
12/20/2011 15:59:09 by Pharmd211
Very nice site!

Pharmd499  Good info
12/20/2011 15:59:41 by Pharmd499
Hello! ecedecb interesting ecedecb site! I'm really like it! Very, very ecedecb good!

Pharmd763  Good info
12/20/2011 16:01:14 by Pharmd763
Very nice site! [url=http://apxoiey.com/qoarqt/2.html]cheap cialis[/url]

Pharme297  Good info
12/20/2011 16:02:17 by Pharme297
Very nice site! cheap cialis http://apxoiey.com/qoarqt/4.html

Pharmb660  Good info
12/20/2011 16:06:26 by Pharmb660
Very nice site!

faxarcato  buy Pills for saturday delivery in Montana 368
01/19/2012 15:44:40 by faxarcato
Most on the web Canadian pharmacologist have got a bodily, brick-and-mortar drug store behind them. They have got real pharmacy technician and so they check with real medical professionals. Lots of the premier and most reliable Canada druggist happen to be in British Columbia as well as ship from British Columbian pharmacies. These kinds of pharmacy will be recognized as well as governed by the School regarding Pharmacy technician of Bc.No-one offers seen a fat. Nevertheless fat laden calories will be agonizingly noticeable when they start a family for you while in the improper locations. It may seem bizarre that a point with no actual everyday living forces you to body fat. Any square in . lacks the taste nor includes a calorie. You can't effect the caloric any further as compared with you'll be able to fit the kids finger over a heating say. It is because hidden being a temperature. The nutrient, simply speaking, is merely your calibrating system of one's energy with regard to high temperature. It is a thermal yardstick used on your deals of one's energy in the body and to the meals which provide like vitality.Inside of a central heater, fossil fuel emits warmth that may become proper within fat laden calories although will likely be worked out in accordance with a different yardstick identified as United kingdom Arctic Items. In your soul, food items produces heat tested throughout calories from fat, a single calorie remaining how much heat needed to enhance the temps of your pint connected with h2o Four diplomas Fahrenheit.You now may perhaps immediately overlook of which distinction. Weight control maths is very very simple that it's recognized as fast when New mother Goose.Fossil fuel, if together slate, will not emit greatly heat. A few food items include much water, inert roughage, along with unburnable features so they do not yield significantly warmth possibly. You should not judge, from the simple actual majority of a meal, simply how much vigor value its content has.It is possible to take small-size food as well as increase in-gloriously extra fat to them. It is additionally probable to eat foods of enormous bulk and also expand skinny as a railway. Your distinctions are things of calories.Most calorie consumption are similar, yet there are 3 different types. That will sounds like a new paradox. Let us often be methodical, in that case, as well as demonstrate in which while any gram calorie represents identical volume of heating, it might be provided by some distinctive kinds of foodstuff factors: carbohydrates, necessary protein, and also body fat. And also oh, the main difference to you personally! The present day solution to weight management lays good force on all these variances. Pure calorie-counting stop being enough. Just one sort of caloric is a lot plus out more streamlined as a weight-reducer versus additional two forms.Glucose can be a unqualified fifty-cent term which appears significantly less formidable whenever you think of these kinds of meals factors to be sweets and starch, that they can tend to be. Fruits, veggies, whole grain cereal in addition to desserts comprise them with general prosperity.They are the simplest food-fuels with regard to muscle bound power. Any time carbohydrate is usually waste, a straightforward way of sugar is poured on the blood stream. If you find that carbohydrates from the bloodstream (or perhaps a touch while in the urine) is unappealing business along with usually means you might be decreasing having all forms of diabetes, be cautioned for you to can not get on without. It can be key with regard to muscle bound exertion, while workshop runners who seem to eat chocolate bars to get swift electricity get very long considering acquired.However, your body holds just a limited number of mister. A substantial ratio on the surplus can be hidden, generally inside hard working liver but will also from the muscles, by using glycogen a new starch-like substance that is sketched upon easily intended for power. If the hardworking liver storehouse can be fully packed, extra carbohydrate is definitely installed on the reality might as well possibly be named weight.Many of us hold carbs throughout excessive gustatorial esteem. A new "sweet tooth" is common one of many over weight. Alcoholics that happen to be to the charrette demonstrate some sort of said searching for candy as a substitute for the mug that will all the best. Additionally there is this being a starch hankering, normally found by means of a great do not forget that usage of bread, pastries, in addition to apples. Generate. Hugh Rony has got noted so connected with an obese laundress who had absolutely no taste no matter what with regard to sweets nonetheless that performed have the ability to consume a person single pound regarding washing starchy foods a day! [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_butalbital_online_no_prescription]www rwds net kwiki plugin attachments perl order butalbital[/url] [url=https://community.jivesoftware.com/bookmarks/2824]india tramadol[/url] [url=http://community.zenoss.org/people/Vegetable/blog/2011/01/16/buy-cheap-tramadol-online-no-prescription]tramadol for cheap[/url] [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_oxycontin_online_no_prescription]shooting up oxycontin[/url] [url=https://developer.webtrends.com/bookmarks/1004]tramadol capsules[/url] [url=https://communities.cisco.com/bookmarks/1975]affect side tramadol[/url] [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_zolpidem_online_no_prescription]zolpidem cr[/url] [url=http://www.gov.harvard.edu/files/u4/cheap-online-order-vicodin-order-vicodin-no-prescription-order-vicodin-next-day.pdf]drug abuse and vicodin[/url] [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_codeine_online_no_prescription]codeine medicine[/url] [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_clonazepam_online_no_prescription]clonazepam half life[/url] [url=http://www.gov.harvard.edu/files/u4/cheap-vicodin-online-cheap-vicodin-no-prescription-cheap-generic-vicodin.pdf]azis slask pl vicodin[/url] [url=http://www.element14.com/community/blogs/AlexBen/2011/01/15/buy-cheap-tramadol-online-no-prescription]tramadol liver damage[/url] [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_oxycodone_online_no_prescription]oxycodone adverse effects[/url] [url=http://engage.intel.com/bookmarks/1225]alcohol tramadol[/url] [url=http://community.beliefnet.com/drgreen/blog/2010/10/17/buy_cheap_ultracet_online_no_prescription]www rxquest com ultracet html[/url] [url=http://www.cs.utexas.edu/sites/default/files/news/documents/anonymous/Buy-Cheap-Acetaminophen-Online-No-Prescription.pdf]acetaminophen cysteine[/url] [url=http://www.gov.harvard.edu/files/u4/purchase-vicodin-online-purchase-vicodin-cod.pdf]example prescription vicodin[/url] [url=http://www.gov.harvard.edu/files/u4/cheapest-vicodin-cheap-vicodin-overnight.pdf]lyrics for five vicodin chased with a shot of clarity[/url] [url=http://www.gov.harvard.edu/files/u4/where-can-i-buy-vicodin-buy-cheapest-vicodin-buy-vicodin-with-mastercard.pdf]intravenously vicodin[/url] [url=http://www.thepoint.com/users/buy-c-heap-tramadol-online-no-prescription/profile]tramadol canine[/url]

Ideadsbem  Are you interested in texas holdem online casinos that accept us customers?
01/21/2012 08:03:17 by Ideadsbem
Top resource dedicated to [b][URL=http://buffaloslot.com/html-casino-games.html]html casino games[/URL][/b] you can find here: [b][URL=http://buffaloslot.com/html-online-casino-black-jack.html]html online casino black jack[/URL][/b]

ArtiliArek  cvs inc pharmacy
01/22/2012 16:35:59 by ArtiliArek
benzo dream online pharmacy http://sundrugstore.net/products/horny-goat-weed.htm physics in pharmacy school

Avaimbgeave  help buying Alprazolam Ambien 735
01/26/2012 21:58:37 by Avaimbgeave
Two. Provide an financial advisor as well as legal representative which is acquainted with pharmacy team capital to review a local drugstore business enterprise bank loan papers.Watch out for counterfeits: To protect yourself from false, replica and/or possibly dangerous items, use an on the internet local drugstore in which sells simply FDA-approved medicines. It also helps to be aware of each side your medicine you are placing your order. In case you are informed about this medication producer, coloration, the labels along with shape, you will then be improved up to date regarding your web obtain.Everyone so want to commence his very own vocation. Just after doing every courses, a nesting matter would have been a very good venture that you are planning to face on the planet connected with occupation. [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/where-can-i-buy-ambien-buy-cheapest-ambien-buy-ambien-with-mastercard.html]ambiente de desarrollo[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-ambien-online-order-ambien-online-best-price.html]tecnico medioambiental[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-alprazolam-online-order-alprazolam-online-buy-generic-alprazolam.html]how long does alprazolam stay in the body[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/purchase-alprazolam-purchase-alprazolam-online-purchase-alprazolam-cod.html]alprazolam wikipedia[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-discount-ambien-discount-ambien-online-buy-ambien-online-no-rx.html]responsabilidade social ambiental[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-ambien-without-a-prescription-buy-ambien-online-no-prescription.html]ambient md5628d l b[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-ambien-without-rx-buy-ambien-overnight-buy-ambien-cod.html]ambient music stream[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-ambien-discount-ambien-for-sale-online-free-shipping-ambien.html]ambien cr via canada[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/cheap-online-order-alprazolam-order-alprazolam-no-prescription-order-alprazolam-next-day.html]alprazolam anxiety book guest site[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-ambien-canada-buy-ambien-uk-ambien-price.html]myblog.esambienz[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/cheap-alprazolam-online-cheap-alprazolam-no-prescription-cheap-generic-alprazolam.html]alprazolam effects[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-alprazolam-canada-buy-alprazolam-uk-alprazolam-price.html]alprazolam gador alplax 2[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-cheap-ambien-online-purchase-ambien-buy-generic-ambien.html]mientes tambien lyric[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/cheap-online-order-ambien-order-ambien-no-prescription-order-ambien-next-day.html]ambiente di lavoro[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/where-can-i-buy-alprazolam-buy-cheapest-alprazolam-buy-alprazolam-with-mastercard.html]picture of alprazolam[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/cheap-ambien-online-cheap-ambien-no-prescription-cheap-generic-ambien.html]ambientales como[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-discount-alprazolam-discount-alprazolam-online-buy-alprazolam-online-no-rx.html]alprazolam 2 mg[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-cheap-alprazolam-online-cheapest-alprazolam-cheap-alprazolam-overnight.html]mexican alprazolam pharmacy[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-alprazolam-discount-alprazolam-for-sale-online-free-shipping-alprazolam.html]clipclip org pharmacybiz clips tag alprazolam[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/cheapest-ambien-cheap-ambien-overnight.html]ambiente interno de[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-alprazolam-without-a-prescription-buy-alprazolam-online-no-prescription.html]who makes generic alprazolam[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/buy-alprazolam-without-rx-buy-alprazolam-overnight-buy-alprazolam-cod.html]php alprazolam order alprazolam online html[/url] [url=http://shinlab.ucsf.edu/sites/shinlab.ucsf.edu/files/ctools/css/purchase-ambien-online-purchase-ambien-cod.html]consultoras medio ambiente[/url]

Leave a Comment

(required)
(required)
(optional, never published)
(optional)
(required)