diff --git a/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java b/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java
index ad2b76b..7c79279 100644
--- a/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java
+++ b/org.eclipse.sisu.inject.tests/src/org/eclipse/sisu/wire/BeanImportTest.java
@@ -17,6 +17,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -31,6 +32,7 @@
 
 import org.eclipse.sisu.BeanEntry;
 import org.eclipse.sisu.Nullable;
+import org.eclipse.sisu.inject.BeanLocator;
 import org.eclipse.sisu.inject.TypeArguments;
 import org.eclipse.sisu.space.ClassSpace;
 import org.eclipse.sisu.space.URLClassSpace;
@@ -787,4 +789,27 @@
         assertSame( y, ( (PlaceholderString) grandchild.getInstance( Key.get( X.class, Names.named( "PS" ) ) ) ).fixed );
         assertSame( y, ( (PlaceholderString) grandchild.getInstance( Key.get( X.class, Names.named( "PS" ) ) ) ).fuzzy );
     }
+
+    public void testParametersLookup()
+    {
+        final BeanLocator locator = Guice.createInjector( new WireModule( new AbstractModule()
+        {
+            @Override
+            protected void configure()
+            {
+                bind( ParameterKeys.PROPERTIES ).toInstance( Collections.singletonMap( "Hello", "world!" ) );
+            }
+        } ) ).getInstance( BeanLocator.class );
+
+        @SuppressWarnings( { "rawtypes", "unchecked" } )
+        final Iterator<Map<?, ?>> itr = new EntryListAdapter( locator.locate( ParameterKeys.PROPERTIES ) ).iterator();
+
+        assertTrue( itr.hasNext() );
+
+        Map<?, ?> parameters = itr.next();
+        assertEquals( 1, parameters.size() );
+        assertEquals( "world!", parameters.get( "Hello" ) );
+
+        assertFalse( itr.hasNext() );
+    }
 }
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java
index 2c041a3..b4b6a04 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/Parameters.java
@@ -67,7 +67,7 @@
  * will merge multiple &#064;{@link Parameters} bindings; for maps by providing an aggregate view over all bound maps,
  * for arrays by appending their elements into a single argument array.
  */
-@Target( value = { ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE } )
+@Target( value = { ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD } )
 @Retention( RetentionPolicy.RUNTIME )
 @Qualifier
 public @interface Parameters
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java
index 75c0b17..43ab3d0 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/inject/QualifyingStrategy.java
@@ -70,6 +70,20 @@
                 return qualifier;
             }
 
+            // binding only has marker type; upgrade to pseudo-instance
+            if ( markerType.equals( binding.getKey().getAnnotationType() )
+                && markerType.getDeclaredMethods().length == 0 )
+            {
+                // this stub is all we need for internal processing
+                return new Annotation()
+                {
+                    public Class<? extends Annotation> annotationType()
+                    {
+                        return markerType;
+                    }
+                };
+            }
+
             if ( binding instanceof ProviderKeyBinding<?> )
             {
                 final Key<?> providerKey = ( (ProviderKeyBinding<?>) binding ).getProviderKey();
diff --git a/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java b/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java
index f706d2c..92e687b 100644
--- a/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java
+++ b/org.eclipse.sisu.inject/src/org/eclipse/sisu/wire/MergedProperties.java
@@ -18,12 +18,9 @@
 import java.util.NoSuchElementException;
 import java.util.Set;
 
-import org.eclipse.sisu.Parameters;
-
 /**
  * Delegating {@link Map} that merges a series of {@link Map}s into one consistent view.
  */
-@Parameters
 final class MergedProperties
     extends AbstractMap<Object, Object>
 {
