Add state for Germany and drop-down menu How do you change the default fields in the addressfield Module for a given country?

For Germany you have , while for USA you get , including a nice drop down menu with all 51 states. 

I want to change the Germany default to have 


only one address field (only Address 1)
a field with a drop down menu, showing the states of Germany.


I read on drupal.stackexchange that it should be possible with hook_form_alter or with ctools module, but within 4 hours of browsing and trying, I could not figure out how?

I'm using drupal for 5 months, so I would appreciate a detailed answer, but also any short link, that helps me to solve that issue, is highly appreciated.
Address Field module uses a plugin system for building the address fields. You should create an address field plugin in your custom module. 

hook_form_alter() wouldn't help much in this case.

To create a plugin for Address Field, you should first implement hook_ctools_plugin_directory() in your module to tell you have an addressfield plugin and where they live:

function YOURMODULE_ctools_plugin_directory($module, $plugin) {
  if ($module == 'addressfield' &amp;&amp; $plugin == 'format') {
    return 'plugins/format';
  }
}


Then, create the folders plugins/format in your module. The folder names are up to you. Under this folder create an .inc file, and give it a relating name, like german-states.inc.

In this file, you should define a $plugin array, which holds the information about your plugin, including the callback function name. Then define a function which can add new form elements, edit existing form elements etc.

$plugin = array(
  'title' =&gt; t('German States'),
  'format callback' =&gt; 'YOURMODULE_format_german_states_generate',
  'type' =&gt; 'name',
  'weight' =&gt; 0,
);

function YOURMODULE_format_german_states_generate(&amp;$format, $address) {
  // Add new form element for German states
  if ($address['country'] == 'DE') {
    $format['locality_block']['administrative_area'] = array(
      '#title' =&gt; t('State'),
      '#required' =&gt; TRUE, // Set this FALSE if you don't want it to be required.
      '#attributes' =&gt; array(
        'class' =&gt; array('state'),
        'x-autocompletetype' =&gt; 'region',
        'autocomplete' =&gt; 'region',
      ),
      '#options' =&gt; array(
        '' =&gt; t('--'),
        'BW' =&gt; t('Baden-Württemberg'),
        'BY' =&gt; t('Bavaria'),
        'BE' =&gt; t('Berlin'),
        'BB' =&gt; t('Brandenburg'),
        'HB' =&gt; t('Bremen'),
        'HH' =&gt; t('Hamburg'),
        'HE' =&gt; t('Hesse'),
        'NI' =&gt; t('Lower Saxony'),
        'MV' =&gt; t('Mecklenburg-Vorpommern'),
        'NRW' =&gt; t('North Rhine-Westphalia'),
        'RP' =&gt; t('Rhineland-Palantine'),
        'SL' =&gt; t('Saarland'),
        'SN' =&gt; t('Saxony'),
        'ST' =&gt; t('Saxony-Anhalt'),
        'SH' =&gt; t('Schleswig-Holstein'),
        'TH' =&gt; t('Thuringia'),
      ),
    );
  }
}