diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/EqualAttributesinSiblingClasses.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/EqualAttributesinSiblingClasses.class
new file mode 100644
index 0000000..6526b0e
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/EqualAttributesinSiblingClasses.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedAttribute.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedAttribute.class
new file mode 100644
index 0000000..874e774
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedAttribute.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedClass.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedClass.class
new file mode 100644
index 0000000..4a21e15
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedClass.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedDataType.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedDataType.class
new file mode 100644
index 0000000..111408e
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedDataType.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedInterface.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedInterface.class
new file mode 100644
index 0000000..3b07aaf
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedInterface.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedOperation.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedOperation.class
new file mode 100644
index 0000000..98460d8
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedOperation.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedPackage.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedPackage.class
new file mode 100644
index 0000000..266a2cf
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedPackage.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedParameter.class b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedParameter.class
new file mode 100644
index 0000000..4525ecf
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/bin/org/eclipse/emf/refactor/smells/uml24/UnnamedParameter.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.smells.uml24/plugin.xml b/org.eclipse.emf.refactor.smells.uml24/plugin.xml
index 9bc4bd3..6590eb5 100644
--- a/org.eclipse.emf.refactor.smells.uml24/plugin.xml
+++ b/org.eclipse.emf.refactor.smells.uml24/plugin.xml
@@ -1,6 +1,68 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <plugin>
 <extension point="org.eclipse.emf.refactor.smells">
-<modelsmell id="org.eclipse.emf.refactor.smells.uml24.concretesuperclass" modelsmell_description="There is an abstract Class having a concrete super Class" modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.ConcreteSuperclass" modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML" modelsmell_name="Concrete Superclass"/>
+<modelsmell 
+      id="org.eclipse.emf.refactor.smells.uml24.concretesuperclass" 
+      modelsmell_description="There is an abstract Class having a concrete super Class" 
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.ConcreteSuperclass" 
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML" 
+      modelsmell_name="Concrete Superclass">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.equalattributesinsiblingclasses"
+      modelsmell_description="Each sibling class of the owning class of the attribute contains an equal attribute."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.EqualAttributesinSiblingClasses"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Equal Attributes in Sibling Classes">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnamedclass"
+      modelsmell_description="The model contains a class without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedClass"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Class">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnamedattribute"
+      modelsmell_description="The model contains an attribute without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedAttribute"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Attribute">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnamedoperation"
+      modelsmell_description="The model contains an operation without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedOperation"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Operation">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnamedinterface"
+      modelsmell_description="The model contains an interface without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedInterface"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Interface">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnamedparameter"
+      modelsmell_description="The model contains a non-return parameter without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedParameter"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Parameter">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnamedpackage"
+      modelsmell_description="The model contains a package without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedPackage"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Package">
+</modelsmell>
+<modelsmell
+      id="org.eclipse.emf.refactor.smells.uml24.unnameddatatype"
+      modelsmell_description="The model contains a data type without a name."
+      modelsmell_finderclass="org.eclipse.emf.refactor.smells.uml24.UnnamedDataType"
+      modelsmell_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+      modelsmell_name="Unnamed Data Type">
+</modelsmell>
 </extension>
 </plugin>
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/EqualAttributesinSiblingClasses.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/EqualAttributesinSiblingClasses.java
new file mode 100644
index 0000000..522f049
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/EqualAttributesinSiblingClasses.java
@@ -0,0 +1,174 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.Property;
+
+
+public final class EqualAttributesinSiblingClasses implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		List<Property> attributes = getAllClassAttributes(root);
+		for (Property attribute : attributes) {
+			Class owningClass = attribute.getClass_();
+			List<Class> superClasses = owningClass.getSuperClasses();
+			for (Class superClass : superClasses) {
+				if (eachSubClassContainsAttribute(superClass, attribute)) {
+					LinkedList<EObject> result = new LinkedList<EObject>();
+					result.add(attribute.getClass_());
+					result.add(attribute);
+					results.add(result);
+				}
+			}
+		}
+		return results;
+	}
+
+	private boolean eachSubClassContainsAttribute(Class superClass, Property attribute) {
+		List<Class> subClasses = new ArrayList<Class>();
+		List<Class> allClasses = getAllClasses(superClass.getModel());
+		for (Class modelClass : allClasses) {
+			if (modelClass != attribute.getClass_() && modelClass.getSuperClasses().contains(superClass)) {
+				subClasses.add(modelClass);
+			}
+		}
+		if (subClasses.isEmpty()) return false;
+		for (Class subClass : subClasses) {
+			if (! classContainsEqualAttribute(subClass, attribute)) {
+				return false;
+			}
+		}
+		return true;
+	}
+	
+	private boolean classContainsEqualAttribute(Class cls, Property attribute) {
+		if (attribute.getClass_().equals(cls)) return true;
+		boolean classHasEqualAttribute = false;
+		for (Property attr : cls.getOwnedAttributes()) {
+			if (! haveSameNames(attr, attribute)) continue;
+			if (! haveSameType(attr, attribute)) continue;
+			if (! haveSameVisibilities(attr, attribute)) continue;
+			if (! haveSameMultiplicities(attr, attribute)) continue;
+			if (! haveSameAggregations(attr, attribute)) continue;
+			if (! haveSameDefaultValues(attr, attribute)) continue;
+			if (! haveSameDerivedProperties(attr, attribute)) continue;
+			if (! haveSameLeafProperties(attr, attribute)) continue;
+			if (! haveSameReadOnlyProperties(attr, attribute)) continue;
+			if (! haveSameUniqueProperties(attr, attribute)) continue;
+			if (! haveSameOrderedProperties(attr, attribute)) continue;
+			if (! haveSameStaticProperties(attr, attribute)) continue;
+			if (! haveSameDerivedUnionProperties(attr, attribute)) continue;
+			if ((attr.getAssociation() != null) && (attribute.getAssociation() != null)) {
+				if (getOtherSideUpper(attr) != getOtherSideUpper(attribute)) continue;
+			}
+			classHasEqualAttribute = true;
+			break;
+		}
+		return classHasEqualAttribute;
+	}
+	
+	private int getOtherSideUpper(Property attribute) {
+		int upper = 0;
+		for (Property ae : attribute.getAssociation().getMemberEnds()) {
+			if (! ae.equals(attribute)) upper = ae.getUpper();
+		}
+		return upper;
+	}
+
+	private boolean haveSameDerivedUnionProperties(Property att1, Property att2) {
+		return (att1.isDerivedUnion() == att2.isDerivedUnion());
+	}
+	
+	private boolean haveSameStaticProperties(Property att1, Property att2) {
+		return (att1.isStatic() == att2.isStatic());
+	}
+
+	private boolean haveSameOrderedProperties(Property att1, Property att2) {
+		return (att1.isOrdered() == att2.isOrdered());
+	}
+	
+	private boolean haveSameUniqueProperties(Property att1, Property att2) {
+		return (att1.isUnique() == att2.isUnique());
+	}
+	
+	private boolean haveSameReadOnlyProperties(Property att1, Property att2) {
+		return (att1.isReadOnly() == att2.isReadOnly());
+	}
+	
+	private boolean haveSameLeafProperties(Property att1, Property att2) {
+		return (att1.isLeaf() == att2.isLeaf());
+	}
+	
+	private boolean haveSameDerivedProperties(Property att1, Property att2) {
+		return (att1.isDerived() == att2.isDerived());
+	}
+
+	private boolean haveSameDefaultValues(Property att1, Property att2) {
+		if ((att1.getDefault() == null) && (att2.getDefault() == null)) return true;
+		if ((att1.getDefault() != null) 
+				&& (att2.getDefault() != null)
+				&& (att1.getDefault().equals(att2.getDefault()))) return true;
+		return false;
+	}
+
+	private boolean haveSameAggregations(Property att1, Property att2) {
+		return att1.getAggregation().equals(att2.getAggregation());
+	}
+
+	private boolean haveSameMultiplicities(Property att1, Property att2) {
+		return ((att1.getLower() == att2.getLower()) 
+				&& (att1.getUpper() == att2.getUpper()));
+	}
+
+	private boolean haveSameVisibilities(Property att1, Property att2) {
+		return att1.getVisibility().equals(att2.getVisibility());
+	}
+
+	private boolean haveSameNames(Property att1, Property att2) {
+		return att1.getName().equals(att2.getName());
+	}
+
+	private boolean haveSameType(Property att1, Property att2) {
+		if ((att1.getType() == null) && (att2.getType() == null)) return true;
+		if ((att1.getType() != null) 
+				&& (att2.getType() != null)
+				&& (att1.getType().equals(att2.getType()))) return true;
+		return false;
+	}
+
+	private ArrayList<Class> getAllClasses(Model model) {
+		ArrayList<Class> classes = new ArrayList<Class>();
+		TreeIterator<EObject> iter = model.eResource().getAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Class) {
+				classes.add((Class) eObject);
+			}			
+		}		
+		return classes;
+	}
+
+	private List<Property> getAllClassAttributes(EObject root) {
+		List<Property> attributes = new ArrayList<Property>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Property) {
+				Property prop = (Property) eObject;
+				if (prop.getClass_() != null) {
+					attributes.add(prop);
+				}
+			}
+		}
+		return attributes;
+	}	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedAttribute.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedAttribute.java
new file mode 100644
index 0000000..3085206
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedAttribute.java
@@ -0,0 +1,46 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Classifier;
+import org.eclipse.uml2.uml.Property;
+
+public final class UnnamedAttribute implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<Property> properties = getAllProperties(root);
+		for (Property prop : properties) {
+			if (prop.getName() == null || prop.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(prop);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<Property> getAllProperties(EObject root) {
+		List<Property> properties = new ArrayList<Property>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Classifier) {
+				Classifier cl = (Classifier) eObject;
+				for (Property prop : cl.getAttributes()) {
+					properties.add(prop);
+				}
+			}
+		}
+		return properties;
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedClass.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedClass.java
new file mode 100644
index 0000000..4eddbfc
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedClass.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Class;
+
+public final class UnnamedClass implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<Class> classes = getAllClasses(root);
+		for (Class cl : classes) {
+			if (cl.getName() == null || cl.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(cl);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<Class> getAllClasses(EObject root) {
+		List<Class> classes = new ArrayList<Class>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Class) {
+				Class cl = (Class) eObject;
+				classes.add(cl);
+			}
+		}
+		return classes;
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedDataType.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedDataType.java
new file mode 100644
index 0000000..a481d60
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedDataType.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.DataType;
+
+public final class UnnamedDataType implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<DataType> dataTypes = getAllDataTypes(root);
+		for (DataType dataType : dataTypes) {
+			if (dataType.getName() == null || dataType.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(dataType);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<DataType> getAllDataTypes(EObject root) {
+		List<DataType> dataTypes = new ArrayList<DataType>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof DataType) {
+				DataType dataType = (DataType) eObject;
+				dataTypes.add(dataType);
+			}
+		}
+		return dataTypes;
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedInterface.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedInterface.java
new file mode 100644
index 0000000..942d9c4
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedInterface.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Interface;
+
+public final class UnnamedInterface implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<Interface> interfaces = getAllInterfaces(root);
+		for (Interface interf : interfaces) {
+			if (interf.getName() == null || interf.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(interf);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<Interface> getAllInterfaces(EObject root) {
+		List<Interface> interfaces = new ArrayList<Interface>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Interface) {
+				Interface cl = (Interface) eObject;
+				interfaces.add(cl);
+			}
+		}
+		return interfaces;
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedOperation.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedOperation.java
new file mode 100644
index 0000000..ee8a9d9
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedOperation.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Operation;
+
+public final class UnnamedOperation implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<Operation> operations = getAllOperations(root);
+		for (Operation op : operations) {
+			if (op.getName() == null || op.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(op);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<Operation> getAllOperations(EObject root) {
+		List<Operation> operations = new ArrayList<Operation>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Operation) {
+				Operation op = (Operation) eObject;
+				operations.add(op);
+			}
+		}
+		return operations;
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedPackage.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedPackage.java
new file mode 100644
index 0000000..ed195f4
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedPackage.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Package;
+
+public final class UnnamedPackage implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<Package> packages = getAllPackages(root);
+		for (Package p : packages) {
+			if (p.getName() == null || p.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(p);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<Package> getAllPackages(EObject root) {
+		List<Package> packages = new ArrayList<Package>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Package) {
+				Package p = (Package) eObject;
+				packages.add(p);
+			}
+		}
+		return packages;
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedParameter.java b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedParameter.java
new file mode 100644
index 0000000..140d108
--- /dev/null
+++ b/org.eclipse.emf.refactor.smells.uml24/src/org/eclipse/emf/refactor/smells/uml24/UnnamedParameter.java
@@ -0,0 +1,45 @@
+package org.eclipse.emf.refactor.smells.uml24;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.smells.interfaces.IModelSmellFinder;
+import org.eclipse.uml2.uml.Parameter;
+import org.eclipse.uml2.uml.ParameterDirectionKind;
+
+public final class UnnamedParameter implements IModelSmellFinder {
+
+	@Override
+	public LinkedList<LinkedList<EObject>> findSmell(EObject root) {
+		LinkedList<LinkedList<EObject>> results = new LinkedList<LinkedList<EObject>>();
+		// begin custom code
+		List<Parameter> parameters = getAllParameters(root);
+		for (Parameter par : parameters) {
+			if (par.getDirection() != ParameterDirectionKind.RETURN_LITERAL)
+			if (par.getName() == null || par.getName().equals("")) {
+				LinkedList<EObject> result = new LinkedList<EObject>();
+				result.add(par);
+				results.add(result);
+			}
+		}
+		// end custom code
+		return results;
+	}
+
+	private List<Parameter> getAllParameters(EObject root) {
+		List<Parameter> parameters = new ArrayList<Parameter>();
+		TreeIterator<EObject> iter = root.eAllContents();
+		while (iter.hasNext()) {
+			EObject eObject = iter.next();
+			if (eObject instanceof Parameter) {
+				Parameter par = (Parameter) eObject;
+				parameters.add(par);
+			}
+		}
+		return parameters;
+	}
+	
+}
\ No newline at end of file
