Dynamics AX
  RSS Feed  LinkedIn  Twitter
Want to turn you're data into a true asset? Ready to break free from the report factory?
Ready to gain true insights that are action focused for truly data informed decisions?
Want to do all of this across mutliple companies, instances of Dynamics and your other investments?
Hillstar Business Intelligence is the answer then! (www.HillstarBI.com)

Hillstar Business Intelligence for Microsoft Dynamics AX and NAV on Mobile, Desktop, Tablet


Let us prove to you how we can take the complexity out of the schema and truly enable users to answer the needed questions to run your business! Visit Hillstar Business Solutions at: www.HillstarBI.com

Wednesday, August 31, 2011

Modeling Business Processes with AX 2012 and Workflow



With the release of Microsoft Dynamics AX 2012, a powerful new way of approaching business process design is given to us. I spoke about this back in an earlier post this year, on Modeling the world, with Dynamics AX. I also continued to talk to this point, with my last interview with Microsoft's own Lachlan Cash.

In that interview, I asked Lachlan about the vision Microsoft has for modeling business processes within Microsoft Dynamics AX 2012, through the use of the Workflow designer. I don't want to re-hash the entire answer, you can go back and read that post from the link above. I do however want to preface this series of post I'm starting, with the following quote from that interview.

"The goal with such items, as the workflow engine is to address the need to bridge the gap between development vs. business process modeling. To take and drive true BP workflows, down to the end user level."

Well here we are, now with AX 2012 alive, kicking and screaming. Well, not sure about the screaming part, but you get the idea. So it's time to start taking the tools, and taking the vision, and by example see this in action, and the value it brings now, and for the future.

To that end, and as I have already mentioned, this is the start of my series on Modeling Business Processes with AX 2012 and Workflow.



For this first post, I want to spend time talking about the value this vision is meant to bring. Talk to the reality of what we currently have, and the ability for partners and customers to adopt this type of approach as part of the overall implementation project, for meeting business requirements.

First the value of such a vision. I've had long talks about this with plenty of people inside and outside of Microsoft. If you read through some of my earlier post, I mention terms like domains specific languages, and the ability to model more and code less. Such terms help describe the vision, and the perceived value supporting the vision is around being more agile, and flexible in the business processes that a company governs and uses.

There have been plenty attempts in the past to do code generation, and this is not the same vision, as what we are talking about doing with workflow to model business processes with. No, instead we are talking about enabling the ability to create workflow elements, that connect into custom components, to enable a business process to exists. The idea, is that this workflow framework, and the elements that make it up, could be used, to create and model business processes, that, in the past would be done through mostly custom code, and parameter based configurations.

So, that is the targeted value, for taking this vision and making it a reality in your AX 2012 projects. The next area we need to look at, is the reality of the current offerings, within AX 2012.



Here we will see, that Microsoft does provide some out-of-the-box offerings, that follow this vision, to enable business process modeling. For example, if you go to Organization Administration, Setup, Workflow, Organization Workflows then you will see, on creating a new workflow whats comes with AX 2012. These are: Case Management workflow, Document Handling & Signing limits workflow. These are workflow templates, that are made up of the elements you see in the image just above this paragraph.

So the reality is, there are some out-of-the-box offerings, in which we can start to use for taking and making the vision a reality. We must also taper this vision, to reality, with the fact that value should drive what we do. I know I sound like a broken record at times, when it comes to business value, but I don't think it can be said enough.

Also, while speaking to the point of reality, AX 2012 is actually the first major stepping stone, in this grand vision of modeling the world, from a business process modeling point of view. So to this point, this is why we see in the offerings from Microsoft that comes with AX 2012, are not very deep, and only enabled and used in certain parts of the application itself.

This brings me to my final point for this first post, which is the ability for the partner and customer to adopt this vision, and thought process, for achieving business requirements, via business process modeling through workflows.

Because there are so many options, and great new features within AX 2012, and we still have time lines and budgets to meet when it comes to AX 2012 implementations, the temptation will be to get this done, and not make use of workflows that much. When weighted against value, which is what should drive the design, and a workflow could meet the business requirement needs, for the business process, that would actually reduce development effort, but require some custom workflow elements, then that approach should be considered.

This is where the rubber meets the road, and where AX 2012 projects, and those who are implementing it, need to really understand the ability of AX 2012. They need to know the vision for the workflows modeling business processes, and the reality of the value this might can bring.

The flip side of that, is not everything is meant to have a workflow govern it, and you can never get away from custom code. I hope, however, to take and through my series on Modeling Business Processes with AX 2012 and Workflow's, that you will see the power this brings, the flexibility, and good examples of using this on projects now, and in the future.

That's all for this part in the series, but check back soon as a whole lot more to come. Till next time!


Visit Hillstar Business Intelligence (www.HillstarBI.com) in order to truly unlock your data trapped in your Microsoft Dynamics investment. With our value driven business intelligence strategy Hillstar help you transform into a data informed company.




"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , ,

Tuesday, August 30, 2011

Microsoft Dynamics AX 2012 - A Dive into Services, Consuming Document Services



With the release of Microsoft Dynamics AX 2012, one of the topics I have been spending a lot of time talking about is around services. There is good reason for this, and we will continue to dive deeper and deeper into the concepts, the reasons for use, and examples of use.

Last I left off, we covered topics related to Custom Services. In this post, I want to take and cover concepts around the consumption of document services.

As I referenced in a previous blog post, there is a great write up already, that covers the technical steps needed to show off how to consume document services, specifically around the Product Data, or the EcoResProductService.

This write up, found here: Product-item data management services, focuses on the consumption of the EcoResProductService, among others, for creating product data, and even releasing that into a given legal entity. Since this is a very nice write up, I will not focus this post on repeating the same effort.

Instead, what I want to focus on, is consuming the EcoResProductService, from within X++, from within AX, for creating Product Master Data. So lets jump right into this.

First thing that we need is an instance of AX 2012, and a project. We will then need, within that project, a custom service group to deploy the out-of-the-box EcoResProductService via. After that, we will need a class, to contain the business logic, and finally for our example a job that kicks off that classes method, and therefore logic for creating our Product Master.



As you can see, from the above image, we have just that for our example. Now since there is nothing we need to really do to the EcoResProductService, lets move into the business logic for creating a Product Master record.

First we need to start with the variables that will be involved in, enabling this.:



You will notice, we have an EcoResProductService variable, which is used to perform the operations that are enabled for a given service, in this case document service, and for our need the create() function.

Next you will see we have a variable that presents the EcoResEcoResProduct object. This is what the EcoResProductService will accept in it's create call that we will see in a bit. This class extends from the AifDocument class, as you can see from the below image.



After that, we have EcoResEcoResProduct_Product_Master class, which is extends from the EcoResEcoResProduct_Product class, which further extends from the AfStronglyTypedDataContainer. You can see this as well, in the image below here.



From there we have variables that represent the EcoResEcoResProduct_Translation, EcoResEcoResProduct_Identifier & EcoResEcoResProduct_ProductDimGroup objects. All of which are used to help make up an EcoResEcoResProduct_Product_Master object.

Now all of that is a mouth full! The point is, we have, in order to work and create Product Master entries, via the Document Services concept, is six objects. These six objects in our example abstract the complexity of the new EcoResProduct data structure, and enable within AX for business logic to move away, from even working directly with the table objects within AX itself. This is very powerful, and very useful.

Now lets move forward, since we have an understanding of the objects that will enable us to create a Product Master record, and look into the code that enables this.



First part of the code, we see in the above image, our logic that initializes the service for use. Then we move towards creating a new instance of the EcoResEcoResProduct object. After that we are creating our Product Master object, and finally filling some of it's parameters, via the use of parameter methods, with values.



Next we are making use of the objects that make up our Product Master object, in the ProdMast variable, for creating the needed: Translation, Identifier and for our example the Product Dimension Group.

You will notice that the code to enable this is ProdMast.createTranslation().addNew(); In doing this, and for the other examples this is true as well, we are creating a new instance of the Translation object, and adding it to the AfStronglyTypeDataContainerList that is represented for the ProdMast variable.



Finally, we come to the bottom of the code block for this business logic, and see we are setting the Variant Configuration Technology. Then adding our ProdMast object to the Strongly Type List for the EcoResProd variable. Finally calling the create method of the service object, passing in our ProdMast variable.

On calling this logic, we get our Product Master record, as shown below.:


So with a total of 17 lines of code, and 6 objects, we are working with Document Services from within AX 2012 itself, and creating Product Master data, without having to work directly with the table objects themselves.

This can then lend itself to be re-used over and over again, and finds value in integration work, as well as data migration. You can also, now take and compare the differences between C# and X++ code for using these document services. They are similar, in theory, but different in syntax and possible approach of course.

That's all I wanted to cover for this series, and for the introduction to services in AX 2012 this just about wraps things up. I plan on doing a summary post, bringing together all the work I've done, all the work Microsoft has done, as well as other community contributors. Till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , , , , , ,

Monday, August 29, 2011

Dynamics Community Article - Master Data Management & Microsoft Dynamics AX 2012



With the release of Microsoft Dynamics AX 2012, a lot of great concepts comes along with it. There are some really great technical things, but this release has been quoted to have more functional adds, than all the major releases of AX combined.

One of these concepts, one that I seem to continue to have a lot of conversations about, is around Master Data Management (MDM). To this end, I thought it would make for a great article, on my guest column for the official Microsoft Dynamics Community site.

Here is a direct link to that article: Master Data Management & Microsoft Dynamics AX 2012

I think for sure it's a timely piece, and of course I welcome plenty of debate, comments, thoughts around all of this. The article expresses my view, of Master Data Management, and gets into the when the context and value makes sense, for using a tool like Master Data Services. Enjoy!

Till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , , , ,

AX 2012 - SSRS Security deployment issue



I wanted to take the time and do a quick post, for reference on a possible security issue you may run into when deploying reports in a new instance of Microsoft Dynamics AX 2012.



In this, lets take and say your part of the Domain Admins group within the Domain for active directory. Your going along, all happy and ready to deploy reports now, and you get the following.:

"The deployment was aborted. You do not have privileges to deploy to server: (servername). For deployment, you must have administrative rights to the SQL Server Reporting Services (SSRS) server. Contact your administrator to deploy."

In running into this, there is actually something a little strange you may have to do, in that if you are in a group within the Local Administration group on the SSRS server, and your getting the above error message. When this is the case then the solution is to take and add your specific active directory user id to the local administrators group on the SSRS server your trying to deploy reports to.

After doing that, then your able to continue on. You can find our more about this from the following link.: Deploy default reports in AX 2012

"If your Windows domain account is assigned to a group that is a member of the Administrators group, it may take some time to validate that you are a member of the Administrators group. Consider adding your Windows domain account directly to the Administrators group if you experience a delay in the report deployment process."

I actually had to perform this action myself, in order to deploy the reports. Hopefully this will help someone out facing the same issue in the future. Make sure to make use of that MSDN article as well.

That's all for now, but check back soon as I have so much more coming! Till Next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , , ,

Thursday, August 25, 2011

Spotlight: EDI Made Simple® courtesy of Data Masons Software



With the release of Microsoft Dynamics AX 2012 now in full swing, one area that will remain a special focus and need for customer implementation projects is around the use of EDI. This is no small undertaking, nor some trivial task that is some pick and choose software, and off you go.

No, this is always a very important part of the success of a project. When EDI is needed based on business requirements, one of the best ones that has been working with AX for many years and is now live for AX 2012 is Data Masons.

Data Masons, a sponsor of this site, has shown their value, project after project for customers, and is ready to go with proven cases studies, like the following one:

“Hydra-Power requested TAP participation from Data Masons and we worked with the Application Integration Framework in Microsoft Dynamics AX 2012 to ensure interoperability for Vantage Point EDI. Data Masons was excited to support Hydra-Power’s TAP participation as we are dedicated to delivering a fully-integrated solution to our clients regardless of their AX version.”

You can download and read the full case study, located here: Hydra-Power Systems Case Study

You can also check out a 3-minute demo video of their Vantage Point EDI solution.


Data Masons is a very active member in the Dynamics Ecosystem and community as a whole, with having several social contributions through their EDI blog, being a contributing member of the ERP SoftwareBlog, and continued support of AXUG through several initiatives.

With this in mind, I virtually sat down with Glenn McPeak, Principal, Data Masons Software, to pick his brain a bit about AX 2012, Data Masons and adding value to customers. Below is the result of that interview.


Glenn McPeak - Principal

Bio: Glenn is a supply chain expert and has over 25 Years of EDI/ERP solution consulting and ERP/EDI software product design and management. Glenn’s has managed and executed over 200 successful ERP and EDI related projects in a wide array of manufacturing and distribution oriented industries.


1. With the release of Microsoft Dynamics AX 2012, how does Data Masons extend and add value to this game changing ERP platform?

Data Masons has 10 years of functional development that has extended AX since version 2.5. Our technology model has enabled us to continue to expand the functional reach of the solution and enable AX customers to handle advanced supply chain integrations with suppliers, customers, logistics providers, contract manufacturers and more. All of the features that are available in our solution for AX 2009 are already available for AX 2012 – very few changes were required to adapt to the AX 2012 platform. We’ve noticed AX 2012 is even easier for us to build advanced integrations and performance has improved, as Microsoft has done an outstanding job streamlining the architecture underlying the Application Integration Framework (AIF) in AX 2012.

2. What are some new functional features for the Data Masons value-add offering for AX 2012, that did not exist, or maybe was not possible until now?

AX 2012 has added improved shipping features that are even more suitable for outbound Advance Ship Notice (ASN) processing. More fields have been added to the base tables that make it more suitable for EDI cross reference maintenance, thus eliminating the need for additional fields. Also, the global address book has been refined even further making it easier for address creation and validation when integrating documents in and out of AX.

3. Pick one great new highlight of AX 2012, either technically or functional focused, that Data Masons likes, or better used to enable you value add solutions.

Hands down the Application Integration Framework is a home run. The set-up of endpoints is much more straightforward and it is easier to add new services that are not pre-packaged in the base system. The AIF has a more direct channel to the application objects and, by eliminating “hops” that Microsoft deemed unnecessary, performance has improved significantly in benchmark testing.


I would like to thank Glenn for taking the time to share his view points, as I know, like all of us, is very busy helping create happy customers with successful ERP projects.

As I stated before, EDI in a given ERP project is not something that should be brushed over, but it is something that is covered well within the partner community for Microsoft Dynamics. Data Masons by far is one of the best ISV solutions for working with your VAR to satisfy your EDI project needs.

That’s all for now, but check back soon as more to come. Till next time!




"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , ,

Tuesday, August 23, 2011

AX 2012 - Slipstreaming a Cumulative update



Recently I wrote about the release of CU1 for Microsoft Dynamics AX 2012.

This is the first cumulative update to be released, for AX 2012, that includes a number of fixes. Cumulative updates, are packaged hotfixes that are meant to fix a set of specific issues.

With the release of Microsoft Dynamics AX 2012, a new concept of "Slipstreaming" updates exists. I made brief mention to this new way of applying updates, in my previous article.

Now the Microsoft EMEA Support team blog was recently updated, with exactly how this can be done for CU1: How can I slipstream Cumulative Updates for AX 2012 as part of a new installation

The above link, will talk you directly through the process of taking the contents from the CU1 release, how to correctly create the sub-folder, under the new updates folder for AX 2012, and deploy the content of the update into that folder.

It's worth to note here, that things that Cumulative updates, as well as service packs are going to be released in such a way, that they can be slipstreamed and applied in such a fashion. However hotfixes will continue to have their own manual instructions for applying said updates, that will most likely not be able to be apart of this slipstream process.

Just to be clear, for everyone, on how this works.: Microsoft works the community, be that Customer or Partner and discovers a bug, or they discover it themselves. A hotfix for that specific bug is created. Then after a set amount of hotfixes are generated, a cumulative updates is created. Typically the cumulative updates contain the previous cumulative update hotfixes. This means, that CU2, when released will actually contain CU1 fixes. From here, after a certain time frame, based on product road map, and market feedback / demand, services packs are released, that bring together all previous cumulative updates, and sometimes also have new feature adds.

So in short: Hotfixes -> Cumulative Updates -> Service Packs.

The idea, behind the slipstream process, is to cut down on the amount of setups one would have to run. In the past, if for example you want to deploy AX 2009, Service Pack 1, CU8. Well the process would be to run the RTM setup, then the SP1 setup and finally the CU8 setups.

With the slipstream process, you deploy the install contents from the ISO file for Microsoft Dynamics AX 2012 to a network share, add to the Updates folder as described in the above mentioned support post, and there is a single setup that has to be executed.

That's all for now, but check back soon as more to come. Till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , ,

Microsoft Dynamics AX 2012 - Report Catalog on TechNet



With the release of Microsoft Dynamics AX 2012 one of the great things that Microsoft itself is doing, is around the documentation and support material being developed and created.

This is a lot better than Microsoft has ever done before, and with the scale and size of changes in this release, it's for sure needed. As part of my coverage of the Dynamics Ecosystem, this is something I will highlight.

So, one of the newest great resources, that I think a lot of people can get a lot of use out of is the Report Catalog for AX 2012

"The Report Catalog for Microsoft Dynamics AX 2012 describes the Microsoft SQL Server Reporting Services reports that are provided with Microsoft Dynamics AX 2012."

What very interesting is the fact that this report catalog is being updated all the time, and it's organized according to the module the report is in. This is Great!

So for example, Accounts receivable reports in AX 2012. Here we have listed all the reports, with their friendly name, and actual Report Object name within AX.

Now, lets dive into, say Customer aging report (CustAgingReport) for AX 2012. Here we see filter information, and field information about this specific report, details of the report and where the data for this report is coming from!

This is going to be a great tool, and can quickly speed up the process for understanding the context, nature and desired audience of a given out-of-the-box report, as well as to help speed up any customization needs.

That's all for now, but I would just like to really give Microsoft credit for doing this right. Please keep it coming Microsoft team!

Check back soon... Till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , ,

Monday, August 22, 2011

MSDW: Getting Ready for Development with Microsoft Dynamics AX 2012 - Part Three: Approach



With the release of Microsoft Dynamics AX 2012, a lot of focus in around the new ways things can be achieved. Specifically around development. A lot of great technologies, and new ways to achieve solutions to business issues do exists.

Because of this, I started on MSDynamicsWorld.com, a series of articles called: Getting Ready for Development with Microsoft Dynamics AX 2012.

In this series, I started with the Vision, and from there went into the Training, and now I have the latest entry in this series over at MSDW: Getting Ready for Development with Microsoft Dynamics AX 2012 - Part Three: Approach

In this latest article, I try to make a very clear point: Use Common sense, and let business requirements, along with best value, drive design and development task.

As I point out in the article, there is no way in a single post, or series even, that I could cover the different aspects and points of approach for Development in AX 2012. This deserves an entire book, or multiple books.

I hope you agree with my statements, and think about the business value for the technical task that are being suggested, and the approach / path that is desired.

That's all for now, till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , , , , , ,

Thursday, August 18, 2011

Spotlight: Dynamics Anywhere Mobile Business Solutions



I wanted to take the time today, with all the great things that are going on with Microsoft Dynamics AX 2012, and do a spotlight on a company called Dynamics Anywhere. You have seen me talk about them before, in interviews with one of their executive Joop, here: Interview with DynamicsAnywhere Executives



Well they are really taking off, and I've had the chance to actually work on an implementation of the Dynamics Anywhere Framework, including the AX Anywhere functional value added solution, built with their own framework.

This is a great solution, that offers multiple platform support, through the use of HTML delivered front ends. All the code development is done within AX itself, therefore nothing outside of AX is needed, beyond their framework to enable a company to quickly start using mobile business application needs.

Some highlights:

In just over 1 year Dynamics Anywhere achieved:
• CfMD for AX Anywhere Framework for mobile business solutions
• Silver ERP & ISV status
• More than 40 partners in 19 countries
• Almost 50 customers
• Presidents Club Member
• Nearly 5 million USD influenced revenue in FY11

I highly recommend you check this company, which is now a sponsor of this site, out.: DynamicsAnywhere.com.



There solution is CFMD, or Certified For Microsoft Dynamics, which you can read more about that from the following.: DYNAMICS ANYWHERE ACHIEVES “CERTIFIED FOR MICROSOFT DYNAMICS” STATUS FOR THEIR MOBILE SOLUTION

From the release:
"“All important analysts agree that mobility now is a top priority for customers and it is one of the areas that yield a very high return on investment. Cost reduction, productivity and additional revenue are drivers for customers to invest in mobile business solutions. Because of our unique concept, it is very easy for any Microsoft Dynamics partner and customer to include mobile solutions and capitalize on their investment in Microsoft Dynamics, ”said Joop van Voorthuijsen, co-founder and vice president, Dynamics Anywhere

“This milestone demonstrates Dynamics Anywhere’s commitment to delivering leading solutions and expertise for our customers,” said Doug Kennedy, vice president, Microsoft Dynamics Partners. “We congratulate Dynamics Anywhere for meeting Microsoft’s highest standards of software quality and earning the CFMD distinction.”"


Well that's all for now, check back soon though as a whole lot more to come. Till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , , ,

Wednesday, August 17, 2011

AX 2012, PowerPivot and a Dash of OData Feeds



Sometime back, I wrote about the importance of Microsoft PowerPivot as well as Open Data Protocol (OData) for Microsoft Dynamics AX 2012. All of those pointed to the fact of what AX 2012 would be able to do with such enabling technologies.

Well now finally we have the launch of Microsoft Dynamics AX 2012, and it's time to start cooking up some self-service BI with PowerPivot and OData feeds!

First it's very important to understand what it means for having data published as OData feeds, coming out of Microsoft Dynamics AX 2012. This starts with a query object within AX, as shown below.:



This is the basis for an OData feed being published, as it's similar the base for Document Services in AX 2012. This is were we stop though, and go a different path from Doucment services, for enabling these feeds. From here, we need to take and go into the Application Workspace, and navigate to: Organization Administration > Setup >Document Management > Document Data soruces.



From here, we need to take and add a new entry. If we do not do this, then nothing will show as active in our list of possible OData feeds. In order to create go to File and then new to create a new document. Once you have the screen up, you should then select the data source type of Query, and select the query we created from the drop down. After that we click "Activate".



At this point, AX system service called ODataQueryService will be what publishes our new query document source we just setup. To test this out, you can open up a IE window, and type the following (Assumes your on the AOS): http://localhost:8101/DynamicsAx/Services/ODataQueryService/

When you do this, and Atom list of queries, that you have security rights too, will appear to work with. That's it for enabling a query to be published as an OData feed. We can start working with this right away yes?



Well, like all great baking stories there are little things that you need to understand so the final product comes out tasty and delicious!

So say, and in the real world this will be the case, that you have Excel and PowerPivot installed on a seperate machines from your AOS. Well if this is the case, and you wanted to work with your published OData feeds from the seperate machine, you might think, ok so instead of using localHost I would use the actual server name.

Wrong! This will cause a 400 Bad Request to be generated, and the reason is the implementation of OData does not allow the use of named servers. You have to use the IP Address of the server in which the ODataQueryService is being published from. So the correct format, to access this from a remote server, or just really separate server than that which the AOS is running is as follows: http://xxx.xxx.xxx.xxx:8101/DynamicsAx/Services/ODataQueryService/

Now of course, any good cook knows that you replace the xxx with the actual values of the ip address itself, however for good measure I point that out to you here.

Doing this, we are actually able to take and see the WSDL, after logging into the box when prompted for our AD creds. You do have to login the first time with your AD creds, however after that you should be fine.



Now that we have our WSDL showing up, we can launch into PowerPivot, and click to add Feed data sources.



Make sure to take and enter into the URI the same format as you did before, and click test connection. This should come back ready for your use, and hit next. In doing so we should see our new query document data source from within AX 2012, being published and therefore able to be consumed as an OData feed.



Now that we have this, we can work with our Query document data sources from within PowerPivot to create some wonderful self-service BI goods! It's pretty powerful stuff to be able to do this, and this adhere's to the security model within AX. Therefore if you have rights to a query then you will see it. Otherwise, you will not see it.

Well that's all for now, I hope you have enjoyed the cooking theme use throughout this post. Till next time!



"Visit the Dynamics AX Community Page today!"


Labels: , , , , , , ,


Copyright 2005-2011, J. Brandon George - All rights Reserved